tcp接收连接

来源:互联网 发布:网店排名优化 编辑:程序博客网 时间:2024/05/22 02:21
#include<signal.h>#include<assert.h>#include<sys/socket.h>#include<arpa/inet.h>#include<netinet/in.h>#include<unistd.h>#include<errno.h>static bool stop=false;static void handle_term(int sig){stop=true;}int main(int argc,char * argv[]){signal(SIGTERM,handle_term);if(argc<=2){printf("usage:%s ip address port_number \n",basename(argv[0]));return 1;}const char * ip=argv[1];int port=atoi(argv[2]);//int backlog=atoi(argv[3]);int sock=socket(PF_INET,SOCK_STREAM,0);assert(sock>=0);struct sockaddr_in address;bzero(&address,sizeof(address));address.sin_family=AF_INET;inet_pton(AF_INET,ip,&address.sin_addr);address.sin_port=htons(port);int ret=bind(sock,(struct sockaddr*)&address,sizeof(address));assert(ret!=-1);ret =listen(sock,5);assert(ret!=-1);sleep(20);struct sockaddr_in client;socklen_t client_addrlength=sizeof(client);int connfd=accept(sock,(struct sockaddr*)&client,&client_addrlength);if(connfd<0)printf("errno is:%d\n",errno);else{char remote[INET_ADDRSTRLEN];printf("connected with ip:%s and port:%d\n",inet_ntop(AF_INET,&client.sin_addr,remote,INET_ADDRSTRLEN),ntohs(client.sin_port));close(connfd);}close(sock);return 0;}

accept只是从监听队列中取出连接,而不论链接处于何种状态(established 和close_wait状态),更不关心网络状况的变化。
0 0