【发布时间】:2015-12-12 01:51:52
【问题描述】:
void async_socket_rcv(int clientfd);
int main(int argc, char *argv[])
{
//Configure buffer to output immediately
setvbuf(stdout, 0, _IONBF, 0);
//Mysql version
printf("MySQL client version: %s\n", mysql_get_client_info());
//Initialize the FDs for the sockets
int socketfd, clientfd;
//Initialize the list of FDs to monitor for input
fd_set fd_monitor;
int select_res;
FD_ZERO(&fd_monitor);
struct timeval select_timeout;
select_timeout.tv_sec = 3;
select_timeout.tv_usec = 0;
//Initialize the thread id
pthread_t thread;
...
//Create the listen socket
socketfd = create_inet_server_socket("0.0.0.0", "5671", LIBSOCKET_TCP, LIBSOCKET_IPv4, 0);
if(socketfd < 0){
printf("Error creating listen socket!");
return -1;
}else{
printf("Listening...");
}
FD_SET(socketfd, &fd_monitor);
//FD_SET(STDIN_FILENO, &fd_monitor);
while(1)
{
select_res = select(sizeof(fd_monitor) * 8, &fd_monitor, NULL, NULL, &select_timeout);
if(FD_ISSET(socketfd, &fd_monitor))
{
clientfd = accept_inet_stream_socket(socketfd,0,0,0,0,0,0);
pthread_create(&thread, NULL, async_socket_rcv, clientfd);
}
select_timeout.tv_sec = 3;
select_timeout.tv_usec = 0;
}
return 0;
}
大家好
我正在尝试使用select() 函数在客户端连接时调用函数,而不必阻塞accept() 函数。我需要能够在不中断服务器的情况下接受stdin。
我上面的代码有效,但只有一次。当我单步执行代码时,如果我在 select() 的 first 迭代中连接到服务器,我可以看到 select_res 是 1 only。之后,什么也没有发生。
我相信你们中的某个人会发现我的一些小错误,但对于我的一生,我看不出我做错了什么......
【问题讨论】:
标签: c multithreading sockets select tcp