一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

getsockopt() setsockopt() ioctlsocket() 用法

 十指緊ㄣ扣 2010-05-14
 
getsockopt()

簡(jiǎn)述:
   獲取一個(gè)套接口選項(xiàng)。

   #include <winsock.h>
  
   int PASCAL FAR getsockopt( SOCKET s, int level, int optname,
   char FAR* optval, int FAR* optlen);

   s:一個(gè)標(biāo)識(shí)套接口的描述字。
   level:選項(xiàng)定義的層次。支持的層次僅有SOL_SOCKET和IPPROTO_TCP。
   optname:需獲取的套接口選項(xiàng)。
   optval:指針,指向存放所獲得選項(xiàng)值的緩沖區(qū)。
   optlen:指針,指向optval緩沖區(qū)的長(zhǎng)度值。

注釋?zhuān)?br>   getsockopt()函數(shù)用于獲取任意類(lèi)型、任意狀態(tài)套接口的選項(xiàng)當(dāng)前值,并把結(jié)果存入optval。在不同協(xié)議層上存在選項(xiàng),但往往是在最高的“套接口”層次上,設(shè)置選項(xiàng)影響套接口的操作,諸如操作的阻塞與否、包的選徑方式、帶外數(shù)據(jù)的傳送等。
   被選中選項(xiàng)的值放在optval緩沖區(qū)中。optlen所指向的整形數(shù)在初始時(shí)包含緩沖區(qū)的長(zhǎng)度,在調(diào)用返回時(shí)被置為實(shí)際值的長(zhǎng)度。對(duì)SO_LINGER選項(xiàng)而言,相當(dāng)于linger結(jié)構(gòu)的大小,對(duì)其他選項(xiàng)來(lái)說(shuō),是一個(gè)整形數(shù)的大小。
   如果未進(jìn)行setsockopt()調(diào)用,則getsockopt()返回系統(tǒng)缺省值。
   getsockopt()支持下列選項(xiàng)。其中“類(lèi)型”欄指出了optval所指向的值。僅有TCP_NODELAY選項(xiàng)使用了IPPROTO_TCP層;其余選項(xiàng)均使用SOL_SOCKET層。

選項(xiàng)        類(lèi)型        意義
SO_ACCEPTCONN BOOL        套接口正在用listen()監(jiān)聽(tīng)。
SO_BROADCAST BOOL        套接口設(shè)置為傳送廣播信息。
SO_DEBUG BOOL        允許調(diào)試。
SO_DONTLINER BOOL        若為真,則SO_LINGER選項(xiàng)被禁止。
SO_DONTROUTE BOOL        禁止選徑。
SO_ERROR int     獲取錯(cuò)誤狀態(tài)并清除。
SO_KEEPALIVE BOOL        發(fā)送“保持活動(dòng)”信息。
SO_LINGER struct linger FAR*   返回當(dāng)前各linger選項(xiàng)。
SO_OOBINLINE BOOL        在普通數(shù)據(jù)流中接收帶外數(shù)據(jù)。
SO_RCVBUF int     接收緩沖區(qū)大小。
SO_REUSEADDR BOOL        套接口能和一個(gè)已在使用中的地址捆綁。
SO_SNDBUF int     發(fā)送緩沖區(qū)大小。
SO_TYPE     int     套接口類(lèi)型(如SOCK_STREAM)。
TCP_NODELAY BOOL        禁止發(fā)送合并的Nagle算法。

getsockopt()不支持的BSD選項(xiàng)有:

選項(xiàng)名    類(lèi)型        意義
SO_RCVLOWAT int     接收低級(jí)水印。
SO_RCVTIMEO int     接收超時(shí)。
SO_SNDLOWAT int     發(fā)送低級(jí)水印。
SO_SNDTIMEO int     發(fā)送超時(shí)。
IP_OPTIONS       獲取IP頭中選項(xiàng)。
TCP_MAXSEG   int     獲取TCP最大段的長(zhǎng)度。
   用一個(gè)未被支持的選項(xiàng)去調(diào)用getsockopt()將會(huì)返回一個(gè)WSAENOPROTOOPT錯(cuò)誤代碼(可用WSAGetLastError()獲?。?br>
返回值:
   若無(wú)錯(cuò)誤發(fā)生,getsockopt()返回0。否則的話(huà),返回SOCKET_ERROR錯(cuò)誤,應(yīng)用程序可通過(guò)WSAGetLastError()獲取相應(yīng)錯(cuò)誤代碼。


錯(cuò)誤代碼:
   WSANOTINITIALISED:在使用此API之前應(yīng)首先成功地調(diào)用WSAStartup()。
   WSAENETDOWN:WINDOWS套接口實(shí)現(xiàn)檢測(cè)到網(wǎng)絡(luò)子系統(tǒng)失效。
   WSAEFAULT:optlen參數(shù)非法。
   WSAEINPROGRESS:一個(gè)阻塞的WINDOWS套接口調(diào)用正在運(yùn)行中。
   WSAENOPROTOOPT:未知或不支持選項(xiàng)。其中,SOCK_STREAM類(lèi)型的套接口不支持SO_BROADCAST選項(xiàng),SOCK_DGRAM類(lèi)型的套接口不支持SO_ACCEPTCONN、SO_DONTLINGER 、SO_KEEPALIVE、SO_LINGER和SO_OOBINLINE選項(xiàng)。
   WSAENOTSOCK:描述字不是一個(gè)套接口。

參見(jiàn):
   setsockopt(), WSAAsyncSelect(), socket().

 

setsockopt()

 

簡(jiǎn)述:
   設(shè)置套接口的選項(xiàng)。

   #include <winsock.h>

   int PASCAL FAR setsockopt( SOCKET s, int level, int optname,
   const char FAR* optval, int optlen);

   s:標(biāo)識(shí)一個(gè)套接口的描述字。
   level:選項(xiàng)定義的層次;目前僅支持SOL_SOCKET和IPPROTO_TCP層次。
   optname:需設(shè)置的選項(xiàng)。
   optval:指針,指向存放選項(xiàng)值的緩沖區(qū)。
   optlen:optval緩沖區(qū)的長(zhǎng)度。

注釋?zhuān)?br>   setsockopt()函數(shù)用于任意類(lèi)型、任意狀態(tài)套接口的設(shè)置選項(xiàng)值。盡管在不同協(xié)議層上存在選項(xiàng),但本函數(shù)僅定義了最高的“套接口”層次上的選項(xiàng)。選項(xiàng)影響套接口的操作,諸如加急數(shù)據(jù)是否在普通數(shù)據(jù)流中接收,廣播數(shù)據(jù)是否可以從套接口發(fā)送等等。
   有兩種套接口的選項(xiàng):一種是布爾型選項(xiàng),允許或禁止一種特性;另一種是整形或結(jié)構(gòu)選項(xiàng)。允許一個(gè)布爾型選項(xiàng),則將optval指向非零整形數(shù);禁止一個(gè)選項(xiàng)optval指向一個(gè)等于零的整形數(shù)。對(duì)于布爾型選項(xiàng),optlen應(yīng)等于sizeof(int);對(duì)其他選項(xiàng),optval指向包含所需選項(xiàng)的整形數(shù)或結(jié)構(gòu),而optlen則為整形數(shù)或結(jié)構(gòu)的長(zhǎng)度。SO_LINGER選項(xiàng)用于控制下述情況的行動(dòng):套接口上有排隊(duì)的待發(fā)送數(shù)據(jù),且closesocket()調(diào)用已執(zhí)行。參見(jiàn)closesocket()函數(shù)中關(guān)于SO_LINGER選項(xiàng)對(duì)closesocket()語(yǔ)義的影響。應(yīng)用程序通過(guò)創(chuàng)建一個(gè)linger結(jié)構(gòu)來(lái)設(shè)置相應(yīng)的操作特性:
   struct linger {
int l_onoff;
int l_linger;
   };
   為了允許SO_LINGER,應(yīng)用程序應(yīng)將l_onoff設(shè)為非零,將l_linger設(shè)為零或需要的超時(shí)值(以秒為單位),然后調(diào)用setsockopt()。為了允許SO_DONTLINGER(亦即禁止SO_LINGER),l_onoff應(yīng)設(shè)為零,然后調(diào)用setsockopt()。
   缺省條件下,一個(gè)套接口不能與一個(gè)已在使用中的本地地址捆綁(參見(jiàn)bind())。但有時(shí)會(huì)需要“重用”地址。因?yàn)槊恳粋€(gè)連接都由本地地址和遠(yuǎn)端地址的組合唯一確定,所以只要遠(yuǎn)端地址不同,兩個(gè)套接口與一個(gè)地址捆綁并無(wú)大礙。為了通知WINDOWS套接口實(shí)現(xiàn)不要因?yàn)橐粋€(gè)地址已被一個(gè)套接口使用就不讓它與另一個(gè)套接口捆綁,應(yīng)用程序可在bind()調(diào)用前先設(shè)置SO_REUSEADDR選項(xiàng)。請(qǐng)注意僅在bind()調(diào)用時(shí)該選項(xiàng)才被解釋?zhuān)还蚀藷o(wú)需(但也無(wú)害)將一個(gè)不會(huì)共用地址的套接口設(shè)置該選項(xiàng),或者在bind()對(duì)這個(gè)或其他套接口無(wú)影響情況下設(shè)置或清除這一選項(xiàng)。
   一個(gè)應(yīng)用程序可以通過(guò)打開(kāi)SO_KEEPALIVE選項(xiàng),使得WINDOWS套接口實(shí)現(xiàn)在TCP連接情況下允許使用“保持活動(dòng)”包。一個(gè)WINDOWS套接口實(shí)現(xiàn)并不是必需支持“保持活動(dòng)”,但是如果支持的話(huà),具體的語(yǔ)義將與實(shí)現(xiàn)有關(guān),應(yīng)遵守RFC1122“Internet主機(jī)要求-通訊層”中第4.2.3.6節(jié)的規(guī)范。如果有關(guān)連接由于“保持活動(dòng)”而失效,則進(jìn)行中的任何對(duì)該套接口的調(diào)用都將以WSAENETRESET錯(cuò)誤返回,后續(xù)的任何調(diào)用將以WSAENOTCONN錯(cuò)誤返回。
   TCP_NODELAY選項(xiàng)禁止Nagle算法。Nagle算法通過(guò)將未確認(rèn)的數(shù)據(jù)存入緩沖區(qū)直到蓄足一個(gè)包一起發(fā)送的方法,來(lái)減少主機(jī)發(fā)送的零碎小數(shù)據(jù)包的數(shù)目。但對(duì)于某些應(yīng)用來(lái)說(shuō),這種算法將降低系統(tǒng)性能。所以TCP_NODELAY可用來(lái)將此算法關(guān)閉。應(yīng)用程序編寫(xiě)者只有在確切了解它的效果并確實(shí)需要的情況下,才設(shè)置TCP_NODELAY選項(xiàng),因?yàn)樵O(shè)置后對(duì)網(wǎng)絡(luò)性能有明顯的負(fù)面影響。TCP_NODELAY是唯一使用IPPROTO_TCP層的選項(xiàng),其他所有選項(xiàng)都使用SOL_SOCKET層。
   如果設(shè)置了SO_DEBUG選項(xiàng),WINDOWS套接口供應(yīng)商被鼓勵(lì)(但不是必需)提供輸出相應(yīng)的調(diào)試信息。但產(chǎn)生調(diào)試信息的機(jī)制以及調(diào)試信息的形式已超出本規(guī)范的討論范圍。
   setsockopt()支持下列選項(xiàng)。其中“類(lèi)型”表明optval所指數(shù)據(jù)的類(lèi)型。
選項(xiàng)        類(lèi)型   意義
SO_BROADCAST BOOL 允許套接口傳送廣播信息。
SO_DEBUG BOOL 記錄調(diào)試信息。
SO_DONTLINER BOOL 不要因?yàn)閿?shù)據(jù)未發(fā)送就阻塞關(guān)閉操作。設(shè)置本選項(xiàng)相當(dāng)于將SO_LINGER的l_onoff元素置為零。
SO_DONTROUTE BOOL 禁止選徑;直接傳送。
SO_KEEPALIVE BOOL 發(fā)送“保持活動(dòng)”包。
SO_LINGER struct linger FAR*   如關(guān)閉時(shí)有未發(fā)送數(shù)據(jù),則逗留。
SO_OOBINLINE BOOL 在常規(guī)數(shù)據(jù)流中接收帶外數(shù)據(jù)。
SO_RCVBUF int 為接收確定緩沖區(qū)大小。
SO_REUSEADDR BOOL 允許套接口和一個(gè)已在使用中的地址捆綁(參見(jiàn)bind())。
SO_SNDBUF int 指定發(fā)送緩沖區(qū)大小。
TCP_NODELAY BOOL 禁止發(fā)送合并的Nagle算法。

   setsockopt()不支持的BSD選項(xiàng)有:
選項(xiàng)名    類(lèi)型 意義
SO_ACCEPTCONN BOOL 套接口在監(jiān)聽(tīng)。
SO_ERROR int 獲取錯(cuò)誤狀態(tài)并清除。
SO_RCVLOWAT int 接收低級(jí)水印。
SO_RCVTIMEO int 接收超時(shí)。
SO_SNDLOWAT int 發(fā)送低級(jí)水印。
SO_SNDTIMEO int 發(fā)送超時(shí)。
SO_TYPE     int 套接口類(lèi)型。
IP_OPTIONS    在IP頭中設(shè)置選項(xiàng)。

返回值:
   若無(wú)錯(cuò)誤發(fā)生,setsockopt()返回0。否則的話(huà),返回SOCKET_ERROR錯(cuò)誤,應(yīng)用程序可通過(guò)WSAGetLastError()獲取相應(yīng)錯(cuò)誤代碼。

錯(cuò)誤代碼:
   WSANOTINITIALISED:在使用此API之前應(yīng)首先成功地調(diào)用WSAStartup()。
   WSAENETDOWN:WINDOWS套接口實(shí)現(xiàn)檢測(cè)到網(wǎng)絡(luò)子系統(tǒng)失效。
   WSAEFAULT:optval不是進(jìn)程地址空間中的一個(gè)有效部分。
   WSAEINPROGRESS:一個(gè)阻塞的WINDOWS套接口調(diào)用正在運(yùn)行中。
   WSAEINVAL:level值非法,或optval中的信息非法。
   WSAENETRESET:當(dāng)SO_KEEPALIVE設(shè)置后連接超時(shí)。
   WSAENOPROTOOPT:未知或不支持選項(xiàng)。其中,SOCK_STREAM類(lèi)型的套接口不支持SO_BROADCAST選項(xiàng),SOCK_DGRAM類(lèi)型的套接口不支持SO_DONTLINGER 、SO_KEEPALIVE、SO_LINGER和SO_OOBINLINE選項(xiàng)。
   WSAENOTCONN:當(dāng)設(shè)置SO_KEEPALIVE后連接被復(fù)位。
   WSAENOTSOCK:描述字不是一個(gè)套接口。

參見(jiàn):
   bind(), getsockopt(), ioctlsocket(), socket(), WSAAsyncSelect().
 
ioctlsocket()

 

簡(jiǎn)述:
   控制套接口的模式。

   #include <winsock.h>

   int PASCAL FAR ioctlsocket( SOCKET s, long cmd, u_long FAR* argp);

   s:一個(gè)標(biāo)識(shí)套接口的描述字。
   cmd:對(duì)套接口s的操作命令。
   argp:指向cmd命令所帶參數(shù)的指針。

注釋?zhuān)?br>   本函數(shù)可用于任一狀態(tài)的任一套接口。它用于獲取與套接口相關(guān)的操作參數(shù),而與具體協(xié)議或通訊子系統(tǒng)無(wú)關(guān)。支持下列命令:
   FIONBIO:允許或禁止套接口s的非阻塞模式。argp指向一個(gè)無(wú)符號(hào)長(zhǎng)整型。如允許非阻塞模式則非零,如禁止非阻塞模式則為零。當(dāng)創(chuàng)建一個(gè)套接口時(shí),它就處于阻塞模式(也就是說(shuō)非阻塞模式被禁止)。這與BSD套接口是一致的。WSAAsynSelect()函數(shù)將套接口自動(dòng)設(shè)置為非阻塞模式。如果已對(duì)一個(gè)套接口進(jìn)行了WSAAsynSelect() 操作,則任何用ioctlsocket()來(lái)把套接口重新設(shè)置成阻塞模式的試圖將以WSAEINVAL失敗。為了把套接口重新設(shè)置成阻塞模式,應(yīng)用程序必須首先用WSAAsynSelect()調(diào)用(IEvent參數(shù)置為0)來(lái)禁至WSAAsynSelect()。
   FIONREAD:確定套接口s自動(dòng)讀入的數(shù)據(jù)量。argp指向一個(gè)無(wú)符號(hào)長(zhǎng)整型,其中存有ioctlsocket()的返回值。如果s是SOCKET_STREAM類(lèi)型,則FIONREAD返回在一次recv()中所接收的所有數(shù)據(jù)量。這通常與套接口中排隊(duì)的數(shù)據(jù)總量相同。如果S是SOCK_DGRAM 型,則FIONREAD返回套接口上排隊(duì)的第一個(gè)數(shù)據(jù)報(bào)大小。
   SIOCATMARK:確實(shí)是否所有的帶外數(shù)據(jù)都已被讀入。這個(gè)命令僅適用于SOCK_STREAM類(lèi)型的套接口,且該套接口已被設(shè)置為可以在線(xiàn)接收帶外數(shù)據(jù)(SO_OOBINLINE)。如無(wú)帶外數(shù)據(jù)等待讀入,則該操作返回TRUE真。否則的話(huà)返回FALSE假,下一個(gè)recv()或recvfrom()操作將檢索“標(biāo)記”前一些或所有數(shù)據(jù)。應(yīng)用程序可用SIOCATMARK操作來(lái)確定是否有數(shù)據(jù)剩下。如果在“緊急”(帶外)數(shù)據(jù)前有常規(guī)數(shù)據(jù),則按序接收這些數(shù)據(jù)(請(qǐng)注意,recv()和recvfrom()操作不會(huì)在一次調(diào)用中混淆常規(guī)數(shù)據(jù)與帶外數(shù)據(jù))。argp指向一個(gè)BOOL型數(shù),ioctlsocket()在其中存入返回值。

兼容性:
   本函數(shù)為Berkeley套接口函數(shù)ioctl()的一個(gè)子集。其中沒(méi)有與FIOASYNC等價(jià)的命令,SIOCATMARK是套接口層次支持的唯一命令。

返回值:
   成功后,ioctlsocket()返回0。否則的話(huà),返回SOCKET_ERROR錯(cuò)誤,應(yīng)用程序可通過(guò)WSAGetLastError()獲取相應(yīng)錯(cuò)誤代碼。


錯(cuò)誤代碼:
   WSANOTINITIALISED:在使用此API之前應(yīng)首先成功地調(diào)用WSAStartup()。
   WSAENETDOWN:WINDOWS套接口實(shí)現(xiàn)檢測(cè)到網(wǎng)絡(luò)子系統(tǒng)失效。
   WSAEINVAL:cmd為非法命令,或者argp所指參數(shù)不適用于該cmd命令,或者該命令
不適用于此種類(lèi)型的套接口。
   WSAEINPROGRESS:一個(gè)阻塞的WINDOWS套接口調(diào)用正在運(yùn)行中。
   WSAENOTSOCK:描述字不是一個(gè)套接口。

參見(jiàn):
   socket(), setsockopt(), getsockopt(), WSAAsyncSelect().

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀(guān)點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多

    国产亚洲不卡一区二区| 国产美女网红精品演绎| 性欧美唯美尤物另类视频| 国产精品大秀视频日韩精品 | 国产国产精品精品在线| 中文字幕免费观看亚洲视频| 国产精品不卡高清在线观看| 亚洲乱码av中文一区二区三区| 丰满少妇被猛烈撞击在线视频| 亚洲午夜福利不卡片在线| 日本人妻精品中文字幕不卡乱码| 婷婷激情四射在线观看视频| 国产高清精品福利私拍| 大香蕉大香蕉手机在线视频| 欧美日韩在线视频一区| 婷婷色网视频在线播放| 欧美av人人妻av人人爽蜜桃| 精品精品国产欧美在线| 日韩精品毛片视频免费看| 国内精品伊人久久久av高清| 亚洲中文字幕视频在线播放| 五月激情婷婷丁香六月网| 国产日韩欧美在线亚洲| 亚洲中文字幕亲近伦片| 国产一级内片内射免费看| 欧美日韩在线视频一区| 成人精品一区二区三区在线| 熟女体下毛荫荫黑森林自拍| 在线免费国产一区二区三区| 精品久久综合日本欧美| 国产91色综合久久高清| 国产精品国三级国产专不卡| 黑丝袜美女老师的小逼逼| 国产成人免费激情视频| 亚洲中文字幕在线观看黑人| 美女露小粉嫩91精品久久久| 亚洲第一香蕉视频在线| 日本最新不卡免费一区二区| 欧美国产精品区一区二区三区| 国产女高清在线看免费观看| 日韩色婷婷综合在线观看|