当前位置: 技术问答>linux和unix
一个带外数据的问题
来源: 互联网 发布时间:2016-10-24
本文导语: 我在服务器主程序中建立一个套接字sockfd,然后用fcntl(sockfd , F_SETOWN , getpid());设置属主。设置好SIGURG的信号处理程序。然后用fork建立一个子进程,在子进程中用accept的到一个new_fd,用来接受普通数据。运行后,发...
我在服务器主程序中建立一个套接字sockfd,然后用fcntl(sockfd , F_SETOWN , getpid());设置属主。设置好SIGURG的信号处理程序。然后用fork建立一个子进程,在子进程中用accept的到一个new_fd,用来接受普通数据。运行后,发现没有反应,只能接受到普通数据, 而不能接受带外数据。
然后我把fcntl(sockfd , F_SETOWN , getpid()) 注释掉,在fork子程序中用fcntl(new_fd , F_SETOWN , getpid());然后就能接收到带外数据了 。
这是为什么呢?子进程不是可以继承父进程的信号处理方式的吗?刚开始那样怎么不行呢?
然后我把fcntl(sockfd , F_SETOWN , getpid()) 注释掉,在fork子程序中用fcntl(new_fd , F_SETOWN , getpid());然后就能接收到带外数据了 。
这是为什么呢?子进程不是可以继承父进程的信号处理方式的吗?刚开始那样怎么不行呢?
|
两次的区别是,前面把属主设置为父进程,后面把属主设置为子进程
|
sockfd 这个是你打开的端口,在这里还没有连键,怎么接收带外数据?
带外数据是在一个连接里边才能接收的
带外数据是在一个连接里边才能接收的