我想使用select在同一个套接字描述符(服务器端)上的客户机/服务器上进行接收和发送。
timestruct* myTime;
sockfd = accept(listeningFd, 0, 0);
while(1)
FD_ZERO(&my_fd_set)
maxFd = sockfd
FD_ZERO(&my_fd_set);
FD_SET(sockfd, &my_fd_set);
select(maxFd+1, &my_fd_set, &my_fd_set, NULL, myTime);
for (j=0; j<=maxFd; j++)
if(FD_ISSET(j, &temp_fd_set))
if(j==sockfd)
send()
if(j==sockfd)
recv()
字符串
这实际上就是我想要做的事情。显然,这是行不通的,因为sockfd对于发送和接收来说是相同的值。有没有一种方法可以不使用fork()来完成这一点?目前我有一个阻塞的recv和send,但服务器可能需要recv多个命令,而另一个命令正在处理发送回客户端。我非常熟悉c和'select()'。因为select有三个fd_set选项(read,write,execute),所以我想也许我可以这样做。
谢谢
1条答案
按热度按时间sshcrbum1#
对
select
的rfds
和wfds
参数使用不同的集合,这样就可以区分sockfd
何时在一个集合中而不是另一个集合中。字符串