sigio进行通信时收不到客户端发来的消息
程序没有报错 但是我感觉流程没啥问题 但是就是收不到发来的信号
#include <sys/socket.h>
#include <csignal>
#include <netinet/in.h>
#include <cstring>
#include <iostream>
#include <unistd.h>
#include <fcntl.h>
using namespace std;
int fd;
void sigio(int sig){
char buf[128];
memset(buf , 0, 128);
sockaddr_in addr;
int addrlen;
int len = recvfrom(fd, buf, 128, 0, (sockaddr*)&addr, (socklen_t*)&addrlen);
cout<<"client :"<<buf<<endl;
int slen = sendto(fd, buf, 128, 0, (sockaddr*)&addr, static_cast<socklen_t>(addrlen));
}
/*
(1):进程的信号集合如何保存
action[64] 每个信号对应不同的位置
(2):如何把signal保存到进程里
我们满足条件调用signal时 实际上是进行了SYSCALL_DEFINE2的调用 在SYSCALL_DEFINE2会调用do_sigaction 从而完成信号和其处理的关联
(3):信号如何发送
Sys_kill(进程号,发什么信号)
*/
int main(){
fd = socket(AF_INET, SOCK_DGRAM, 0);
signal(SIGIO, sigio);
sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_port = htons(9999);
addr.sin_addr.s_addr = INADDR_ANY;
bind(fd, (sockaddr*)&addr, sizeof(addr));
while (true) {
sleep(1);
}
}