1. create socket
struct sockaddr_in addr;
addr.sin_family = af_i***;
// server address
addr.sin_addr.s_addr = i***_addr(host);
// server port
addr.sin_port = htons(port);
// creating socket
if ((soc = socket(af_i***, sock_stream, ipproto_tcp)) == invalid_socket)
throw connector_exception("connector: can't create socket");
2. connect
if (::connect(soc, (struct sockaddr *) &addr, sizeof(addr)) == socket_error)
throw connector_exception("connector: can't connect.");
3. 設定為非阻塞式socket
unsigned long ul = 1;
int ret = ioctlsocket(rec(), fionbio, (unsigned long*)&ul);
if(ret==socket_error)
log <<"ioctlsocket error" << endl;
4. select socket
fd_zero(&r_readfds);fd_zero(&r_exfds);
fd_set(rec(), &r_readfds);fd_set(rec(), &r_exfds);
if ((iret=select(0,&r_readfds, null,&r_exfds,&tv))==socket_error){
每次呼叫好select後,select 函式自動把r_readfds,r_exfds都設為空,必須重新呼叫
fd_zero(&r_readfds);fd_zero(&r_exfds);
fd_set(rec(), &r_readfds); fd_set(rec(), &r_exfds); 否則會報10022 wsaeinval 錯誤因為select如果超時會自動清空r_readfds,r_exfds。但是如果不超時,則不清空,所以要呼叫fd_zero(&r_readfds);fd_zero(&r_exfds);保證清空
5 參考文獻
Socket中如何設定連線超時
socket中如何設定連線超時 設定connect的超時很簡單,csdn上也有人提到過使用select,但卻沒有一個令人滿意與完整的答案。偶所講的也正是select函式,此函式整合在winsock1.1中,簡單點講,作用使那些想避免在套接字呼叫過程中被鎖定的應用程式,採取一種有序的方式,同時對多個套...
Socket中如何設定連線超時
設定connect的超時很簡單,csdn上也有人提到過使用select,但卻沒有一個令人滿意與完整的答案。偶所講的也正是select函式,此函式整合在winsock1.1中,簡單點講,作用使那些想避免在套接字呼叫過程中被鎖定的應用程式,採取一種有序的方式,同時對多個套接字進行管理 windows網路...
Socket中如何設定連線超時
設定connect的超時很簡單,csdn上也有人提到過使用select,但卻沒有一個令人滿意與完整的答案。偶所講的也正是select函式,此函式整合在winsock1.1中,簡單點講,作用使那些想避免在套接字呼叫過程中被鎖定的應用程式,採取一種有序的方式,同時對多個套接字進行管理 windows網路...
Socket中如何設定連線超時
socket中如何設定連線超時 把csdn與中文yahoo翻了底朝天,也沒找到如何設定socket的連線超時的滿意方法,問此問題的兄弟已有一大堆,這裡偶就講一下win下如何設定socket的connect超時。設定connect的超時很簡單,csdn上也有人提到過使用select,但卻沒有一個令人滿...
Socket中如何設定連線超時
socket中如何設定連線超時 設定connect的超時很簡單,csdn上也有人提到過使用select,但卻沒有一個令人滿意與完整的答案。偶所講的也正是select函式,此函式整合在winsock1.1中,簡單點講,作用使那些想避免在套接字呼叫過程中被鎖定的應用程式,採取一種有序的方式,同時對多個套...