当前位置: 技术问答>linux和unix
如何在主进程共享子线程中accept得到的socket号?
来源: 互联网 发布时间:2015-05-26
本文导语: 用全局变量带回socket号但不能使用,子线程中该资源是私有的。请大家帮忙 谢谢 | 我感觉是能公用的。 | 1、g_Sock = newSock应该设置mutex或condition variable,否则有可能产生冲...
用全局变量带回socket号但不能使用,子线程中该资源是私有的。请大家帮忙 谢谢
|
我感觉是能公用的。
|
1、g_Sock = newSock应该设置mutex或condition variable,否则有可能产生冲突。
2、POSIX标准是O_NONBLOCK,不要用O_NDELAY了。
3、g_Sock应该是有效的。accept只是说明对端用connect连接了,即完成了三次握手,对端不一定发送了数据。你用了非阻塞socket,当然可能收不到数据就返回。查看此时的errno。
2、POSIX标准是O_NONBLOCK,不要用O_NDELAY了。
3、g_Sock应该是有效的。accept只是说明对端用connect连接了,即完成了三次握手,对端不一定发送了数据。你用了非阻塞socket,当然可能收不到数据就返回。查看此时的errno。
|
可以用哦是线程的嘛
|
>>g_Sock = newSock;(用它带回让主进程使用)
如果你用的是多进程而不是用多线程,那么这个g_Sock是无法带回父进程的,很明显父子进程各有一个g_Sock变量,不是同一个。
一般做法是父进程accept(),得到newSock后fork()子进程对这个socket处理。
或者用线程。
如果你用的是多进程而不是用多线程,那么这个g_Sock是无法带回父进程的,很明显父子进程各有一个g_Sock变量,不是同一个。
一般做法是父进程accept(),得到newSock后fork()子进程对这个socket处理。
或者用线程。