跨平台非阻塞SOCKET實現原始碼分析

2021-10-22 22:26:00 字數 530 閱讀 9240

1.實現linux與windows的共同函式

a.linux平台標頭檔案引用:

#include #include #include #include #include #include #include #include #include #include
b.windows平台標頭檔案引用

#include #include
c.windows平台在建立socket前要載入wsa庫,在關閉socket後要釋放wsa庫,linux平台不用 ,所以為了**相容,需要對同一功能不現平台的差異實現

windows:  

通過wsastartup載入wsa庫

#define _sock_init( )
通過wsacleanup釋放wsa庫 

#define _sock_exit( )
通過wsagetlasterror捕獲錯誤

Socket實現非阻塞連線

include include include include pragma comment lib,ws2 32.lib define time out time 20 connect超時時間20秒 void geturl char url socket sockfd struct sockadd...

socket阻塞與非阻塞

何為阻塞?在以上過程中若連線還沒到來,那麼接受阻塞,程式執行到這裡不得不掛起,cpu轉而執行其他執行緒。在以上過程中若資料還沒準備好,請閱讀會一樣也會阻塞。阻塞式網路io的特點 多執行緒處理多個連線。每個執行緒擁有自己的棧空間並且占用一些cpu時間。每個執行緒遇到外部為準備好的時候,都會阻塞掉。阻塞...

轉阻塞socket和非阻塞socket

讀操作 對於阻塞的socket,當socket的接收緩衝區中沒有資料時,read呼叫會一直阻塞住,直到有資料到來才返 回。當socket緩衝區中的資料量小於期望讀取的資料量時,返回實際讀取的位元組數。當sockt的接收緩衝 區中的資料大於期望讀取的位元組數時,讀取期望讀取的位元組數,返回實際讀取的長...