我正在使用TCP套接字建立服務器 - 客戶端連接。每當我關閉客戶端套接字時,我的服務器也關閉。但是我只想關閉我的客戶端,我的服務器必須等待下一個accept()
。關閉客戶端套接字並保持服務器套接字處於活動狀態
服務器端:
{
bind(lfd,(struct sockaddr*)&serv_addr, sizeof(serv_addr));
listen(lfd, 10);
while(1)
{
cfd = accept(lfd, (struct sockaddr*)NULL, NULL);
//server must wait here after client closes the connection application code
close(lfd);
}
}
客戶端:
inet_pton(AF_INET, argv[1], &serv_addr.sin_addr);
connect(fd, (struct sockaddr *)&serv_addr, sizeof(serv_addr));
// ... application code
if(c == 1)
close(fd);
查找TCP套接字多線程/ multiconnection例子,看看如何做到這一點。例如。在Codeproject.com – i486
訣竅是分叉一個新的進程來處理新的連接。然後在您的子進程運行查詢完成時繼續運行主進程。如果你使用線程(你可以),那麼你需要確保線程不會關閉其他的套接字 - 因爲線程共享相同的堆。 – Owl