使用socket函式的一些常見錯誤

2021-07-04 17:29:22 字數 1763 閱讀 9470

socket socket( int af, int type, int protocol );

type,通常為sock_stream或sock_dgram

標頭檔案中定義的只有如下幾種標準型別:

#define sock_stream 1

#define sock_dgram 2

#define sock_raw 3

#define sock_rdm 4

#define sock_seqpacket 5

使用非如上定義的型別。

返回:-1。

錯誤:10044(在這個位址家族中不存在對指定的插槽型別的支援)

protocol,通常為0

type = sock_stream,protocol = 6

正常type = sock_stream,protocol = 7

返回:-1

錯誤號:10043(請求的協議還沒有在系統中配置,或者沒有它存在的跡象)

type = sock_dgram,protocol = 17

正常type = sock_dgram,protocol = 19

返回:-1

錯誤號:10043(請求的協議還沒有在系統中配置,或者沒有它存在的跡象)

結論socket暫時只支援af_inet協議族。

對非標準的套接字型別不支援。

協議號引數可以為0,則使用與套接字型別相應的協議號;否則,協議號引數必須與相應的套接字型別相同。

int bind( socket s, const struct sockaddr far* name, int namelen );

int listen(socket s, int backlog);

「windows套接字實現中最多隻允許伺服器同時監聽5個套接字。使用引數0,則系統將把該引數改為1,而使用超過5的值,系統將自動把該引數改為5。」

設定引數值為0,有1個客戶機可同時與伺服器連線(在vista下有時有2個可以連線,有時有3個可以連線,-_0//)設定引數值為1,有1個客戶機可同時與伺服器連線設定引數值為10,有10個客戶機可同時與伺服器連線

socket accept( socket s, struct sockaddr far* addr, int far* addrlen );

int recv( socket s, char far* buf, int len, int flags );

對於伺服器,一般是ns = accept(s , &addr , &len) ;

int send( socket s, const char far* buf, int len, int flags );

int closesocket( socket s );

int connect( socket s, const struct sockaddr far* name, int namelen );

int recvfrom( socket s, char far* buf, int len, int flags, struct sockaddr far* from, int far* fromlen );

填寫from結構

向其中填入非對端使用的位址或埠。

正常接收,並且from內建對端位址資訊。

int sendto( socket s, const char far* buf, int len, int flags, const struct sockaddr far* to, int tolen );

常見的一些 Hash 函式

hash的主要原理就是把大範圍對映到小範圍 所以,你輸入的實際值的個數必須和小範圍相當或者比它更小。不然衝突就會很多。不同的應用對hash函式有著不同的要求 比如,用於加密的hash函式主要考慮它和單項函式的差距,而用於查詢的hash函式主要考慮它對映到小範圍的衝突率。下面介紹一些常用的用於查詢ha...

一些常見的移位函式

微控制器 crol 字元迴圈左移 cror 字元迴圈右移 irol 整數迴圈左移 iror 整數迴圈右移 lrol 長整數迴圈左移 lror 長整數迴圈右移一些暫存器置位 define gpioc crl unsigned int gpioc base 0x00 define rcc apb2enr...

常見的一些 Hash 函式

hash的主要原理就是把大範圍對映到小範圍 所以,你輸入的實際值的個數必須和小範圍相當或者比它更小。不然衝突就會很多。不同的應用對hash函式有著不同的要求 比如,用於加密的hash函式主要考慮它和單項函式的差距,而用於查詢的hash函式主要考慮它對映到小範圍的衝突率。下面介紹一些常用的用於查詢ha...