突然发现Linux下socket的怪异之处!
有两点奇怪的地方。
第一、阻塞模式下,无accept,connect返回成功
背景:connect运行在阻塞模式下,服务端也是阻塞的,只能接收一个客服端的请求。
问题:服务端运行在死循环里,当接收到一个客户端连接后,accept并进入交互。此时再有一个客户端连接上来,connect返回成功,发送消息被缓存起来,等待第一个客户端退出后。服务端accept与此客户端建立连接。
问题是都没accept,应该connect不成功才对,原因是啥?如果是listen放到缓存队列里的话,那怎么样可以不缓存,让connect直接返回失败!
第二、非阻塞模式下,connect均返回失败
非阻塞模式下,本地客户端连接本地服务端,服务端accept成功,但客户端connect返回失败。远程客户端连接本地服务端,连不上。。。是何原因。代码整理之后贴出来