是否可以在任何通用平台(例如,在Windows中)编写一个创建套接字的servient进程,将其绑定到一个本地“address:port”(固定),然后:
那是(抱歉语法滥用):
mySocket =插座(); mySocket.bind( myaddress ,3000); mySocket.connectTo( neighbor , whateverport ); //并将其作为端口3000呈现给其他人 mySocket.listen(); //它听3000 mySocket.accept();
iirc,甚至在API不会抱怨的情况下甚至不可能/可取,但也许是因为我在书上玩了太多...所以我想问你
非常感谢!
答案 0 :(得分:2)
不,套接字不能同时用于收听和连接。如果已调用connect()
,WSAEINVAL
将返回listen()
错误,如果已调用listen()
,WSAEISCONN
将返回connect()
错误。您需要使用单独的套接字。
答案 1 :(得分:2)
如果可以的话,会出现各种各样的麻烦。例如,如果select()返回套接字是可读的,你会执行recv()或accept()吗?你想要2个插座来扮演这两个角色。
一个插座有什么优势?例如,如果您希望在发生一些有趣的事情(传入连接,传入数据)之前进行阻塞读取,则有其他选择。在该示例中,您将使用select()一次阻塞两个套接字。 select()的结果告诉您哪个套接字已准备就绪。这告诉您是否要接受()来自一个套接字的新连接或recv()来自另一个套接字的新数据。