libevent非同步tcp連線伺服器的過程:
1)建立nonblock的socket,
2)呼叫connect連線伺服器,檢查返回值,判斷是否是阻塞了,如果是,就設定等待 ev_write事件:
event_set(&m_evsocket, m_isockfd, ev_write, onconnect, this);
3)ev_write返回後,判斷event是否為ev_write,
關鍵一點:如果ev_write,還要進一步判斷sockopt是否正確。
**片段如下:
bool cclientsocket::connectsocket(string szhostaddr, int nhostport)
struct sockaddr_in ser_addr;
memset(&ser_addr, 0, sizeof(struct sockaddr_in));
ser_addr.sin_family = af_inet;
ser_addr.sin_addr.s_addr = inet_addr(szhostaddr.c_str());
ser_addr.sin_port = htons(nhostport);
if(connect(m_isockfd, (const struct sockaddr *) &ser_addr,sizeof(ser_addr)) == -1)
else
} else
}void cclientsocket::onconnect(int fd, short event, void *arg)
else
} else
}void cclientsocket::onconnect()
參考:
TCP通訊(二) 非同步連線
本篇部落格主要講述的非同步的問題。首先明確非同步到底是什麼東東,非同步就是發起乙個指令,並不需要一直等待指令的執行結果,而是可以繼續忙其他的事情。一 非同步連線 服務端 using system using system.collections.generic using system.linq u...
socket非同步程式設計 libevent的使用
這篇文章介紹下libevent在socket非同步程式設計中的應用。在一些對效能要求較高的網路應用程式中,為了防止程式阻塞在socket i o操作上造成程式效能的下降,需要使用非同步程式設計,即程式準備好讀寫的函式 或介面 並向系統註冊,然後在需要的時候只向系統提交讀寫的請求之後就繼續做自己的事情...
非同步TCP連線伺服器端
tcptranslate 為傳輸輔助類,此外 不全.待續.using system using system.io using system.text using system.net using system.net.sockets using system.collections.generic...