1. 程式人生 > >socket函式返回值分析

socket函式返回值分析

服務端:

1 WSAStartup(版本,本機的最高版本)

WSAStartup函式的第一個引數是載入WinSock庫的版本,WSAStartup函式的第二個引數中設定使用的WinSock庫的版本,當正確初始化時,WSAStartup會返回0。但我在WSAStartup函式的第一個引數中胡亂設定了一個版本號,WSAStartup仍然會返回0。

如果在WSAStartup函式第一個引數中設定的版本號不存在,那麼會自動使用WinSock庫中最低的版本1.1。

2socket(協議方案,資料流/快形式,附加協議)

socket     成功

  INVALID_SOCKET  錯誤

socket返回的值是一個

檔案描述符,SOCKET型別本身也是定義為int的,既然是檔案描述符,那麼在系統中都當作是檔案來對待的,0,1,2分別表示標準輸入、標準輸出、標準錯誤。所以其他開啟的檔案描述符都會大於2, 錯誤時就返回 -1. 這裡INVALID_SOCKET 也被定義為 -1

3 bind(socket返回的socket,定義的SOCKADDR_IN 結構體,<-這個的大小)

0 成功

SOCKET_ERROR 錯誤(<0)可用WSAGETLASTERROR 函式取錯誤碼

4 listen(socket返回的socket,佇列長度)

0 成功

SOCKET_ERROR 錯誤(<0)可用

WSAGETLASTERROR 函式取錯誤碼

5 accept (socket返回的socket,指向的定義的SOCKADDR_IN 結構體指標,指標的大小

0 成功

SOCKET_ERROR 錯誤(<0)可用WSAGETLASTERROR 函式取錯誤碼

6 recv/recvfrom (socket返回的socket,要放在的BUF,BUF長度,接收方式)

>0 返回收到的位元組數目

=0斷開連線

<0錯誤

7 send/sendto(socket返回的socket,要發的,發的長度,接收方式

>0 返回發的位元組數目

=0斷開連線

<0錯誤

客戶端:

connect (socket返回的socket,定義的SOCKADDR_IN 結構體,<-這個的大小)

阻塞時:

0 成功

SOCKET_ERROR 錯誤(<0)可用WSAGETLASTERROR 函式取錯誤碼

非阻塞時:不能立即返回值,連線 返回SOCKET_ERROR 

WSAGETLASTERROR 函式返回WSAEWOULDBLOCK