資源簡介
I/O復用 一個客戶端一個線程
代碼片段和文件信息
/**?I/O復用???一個客戶端一個線程
?*
?*??gcc?-o?50_06th_server_threads?50_06th_server_threads.c?-lpthread
?*/
?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include? /*?See?NOTES?*/
#include?
#include?
void?*task_client(void?*arg)?{
int?clientfd?=?*(int?*)arg;
char?buf[1024];
????printf(“this?is?a?new?thread?you?got?connected?%d\n“?clientfd);
pthread_detach(pthread_self());?//標記為DETACHED狀態,完成后釋放自己占用的資源。
while?(1)?{
if?(recv(clientfd?buf?sizeof(buf)-1?0)?>?0)?{??//MSG_OOB
}?else?{
perror(“recv“);
break;
}
printf(“Received?a?message?:?%s\n“?buf);
}
printf(“this?is?over?\n“);
}
int?main(int?argc?char?*argv[])?{?
????struct?sockaddr_in?addr;
????int?nb_connection?=?5;
????int?listenfd?=?socket(AF_INET?SOCK_STREAM?0);
????if?(listenfd?==?-1)?{
????????return?-1;
????}
????int?on?=?1;?//允許重復使用本地地址與套接字進行綁定
????setsockopt(listenfd?SOL_SOCKET?SO_REUSEADDR?(char?*)?&on?sizeof(int));
????addr.sin_family?=?AF_INET;
????addr.sin_port?=?htons(5050);
addr.sin_addr.s_addr?=?htonl(INADDR_ANY);
????//addr.sin_addr.s_
- 上一篇:mfc 調用redis
- 下一篇:traceroute路由跟蹤
評論
共有 條評論