我想使用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选项(读,写,执行),我想也许我可以做到这一点 .
谢谢 .
1 回答
使用
rfds
和wfds
参数的不同集合为select
,因此您可以区分sockfd
在一个集合中而不在另一个集合中 .