是否可以有多个套接字,可以通过TCP或UDP在一个程序中使用?
例如: SocketOne:端口4567的TCP套接字; socketTwo:端口8765的TCP套接字; socketThree:7643处的UDP套接字。
这些家庭将是AF_INET,每个家庭的地址都是INADDR_ANY。
我绑定并侦听TCP,只绑定UDP。
让我怀疑要做到这一点的是,如何在每个插槽中等待客户端。
我知道下面的代码不起作用,但我不知道还有什么,或者如何解释我想说的内容。
while (1)
{
connected = accept(socketOne, (struct sockaddr *)&client_addr,&sin_size);
connected = accept(socketTwo, (struct sockaddr *)&client_addr,&sin_size);
bytes_read = recvfrom(socketThree,recv_data,1024,0,(struct sockaddr *)&client_addr, &addr_len);
}
答案 0 :(得分:4)
您需要select
功能:http://linux.die.net/man/2/select
更加用户友好:http://beej.us/guide/bgnet/html/single/bgnet.html#select
答案 1 :(得分:1)
man 选择。
答案 2 :(得分:1)
有一些现实世界的例子。 FTP有一个控制和数据端口,使用TCP和多媒体应用程序将使用SIP或RTSP连接进行控制(TCP),并为每个接收到的数据流使用多个RTP和RTCP端口(UDP)。
select或poll用于unix,在Windows上有OVERLAPPED apis非抢占式地执行此操作。或者,这可以通过多个线程来完成。