伺服器端盡可能使用reuseaddr
在繫結之前盡可能呼叫setsockopt來設定reuseaddr套接字選項。
使用reuseaddr選項可以使得不必等待time_wait狀態消失可以重啟伺服器。
echoserver.cpp
#include #include #include #include #include #include #include #include #include #define err_exit(m) \
do \
while(0)
void do_service(int conn) else if(-1 == ret)
fputs(recvbuf, stdout);
write(conn, recvbuf, ret);
}}int main ()
if(pid == 0) else
}close(listenfd);
close(conn);
return 0;
}
echoclient.cpp
#include #include #include #include #include #include #include #include #include #define err_exit(m) \
do \
while(0)
int main () ;
char recvbuf[1024] = ;
while(fgets(sendbuf, sizeof(sendbuf), stdin) != null)
close(sock);
return 0;
}
p2pserver.cpp
#include #include #include #include #include #include #include #include #include #include #define err_exit(m) \
do \
while(0)
void handler(int sig)
int main ()
if(0 == pid) ;
while(fgets(sendbuf, sizeof(sendbuf), stdin) != null)
printf("child close\n");
close(listenfd);
close(conn);
//err_exit(exit_success);
} else else if(-1 == ret)
fputs(recvbuf, stdout);
} printf("parent close\n");
kill(pid, sigusr1);
close(listenfd);
close(conn);
//err_exit(exit_success); }
return 0;
}
p2pclient.cpp
#include #include #include #include #include #include #include #include #include #include #define err_exit(m) \
do \
while(0)
void handler(int sig)
int main ()
if(0 == pid) ;
while(1) else if(0 == ret)
fputs(recvbuf, stdout);
} close(sock);
kill(getppid(), sigusr1);
exit(exit_success);
} else ;
while(fgets(sendbuf, sizeof(sendbuf), stdin) != null)
close(sock);
exit(exit_success);
}
return 0;
}
socket程式設計原理 三
程式在使用套接字前,首先必須擁有乙個套接字,系統呼叫socket 向應用程式提供建立套接字的手段,其呼叫格式如下 socket pascal far socket int af,int type,int protocol 該呼叫要接收三個引數 af type protocol。引數af指定通訊發生的...
socket程式設計入門篇(三)
這篇部落格介紹多執行緒併發伺服器的實現。下面貼 服務端 include include include include include include include include include includeusing namespace std define serverip 127.0.0...
Python 基礎之socket程式設計(三)
python 基礎之socket程式設計 三 前面實現的基於socket通訊只能實現什麼呢?在tcp協議的通訊中就是乙個使用者說一句,服務端給你回一句,你再給服務端說一句,服務端再給你回一句,就這樣一直友好的玩耍下去了。等等,又有乙個使用者來了,他呢也想和和服務端進行一下交流,於是他就給服務端傳送了...