C語言設(shè)置和取得socket狀態(tài)的相關(guān)函數(shù)用法
C語言setsockopt()函數(shù):設(shè)置socket狀態(tài)
頭文件:
#include <sys/types.h> #include <sys/socket.h>
定義函數(shù):
int setsockopt(int s, int level, int optname, const void * optval, ,socklen_toptlen);
函數(shù)說明:setsockopt()用來設(shè)置參數(shù)s 所指定的socket 狀態(tài). 參數(shù)level 代表欲設(shè)置的網(wǎng)絡(luò)層, 一般設(shè)成SOL_SOCKET 以存取socket 層. 參數(shù)optname 代表欲設(shè)置的選項, 有下列幾種數(shù)值:
SO_DEBUG 打開或關(guān)閉排錯模式
SO_REUSEADDR 允許在bind ()過程中本地地址可重復(fù)使用
SO_TYPE 返回socket 形態(tài).
SO_ERROR 返回socket 已發(fā)生的錯誤原因
SO_DONTROUTE 送出的數(shù)據(jù)包不要利用路由設(shè)備來傳輸.
SO_BROADCAST 使用廣播方式傳送
SO_SNDBUF 設(shè)置送出的暫存區(qū)大小
SO_RCVBUF 設(shè)置接收的暫存區(qū)大小
SO_KEEPALIVE 定期確定連線是否已終止.
SO_OOBINLINE 當(dāng)接收到OOB 數(shù)據(jù)時會馬上送至標(biāo)準(zhǔn)輸入設(shè)備
SO_LINGER 確保數(shù)據(jù)安全且可靠的傳送出去.
參數(shù) optval 代表欲設(shè)置的值, 參數(shù)optlen 則為optval 的長度.
返回值:成功則返回0, 若有錯誤則返回-1, 錯誤原因存于errno.
附加說明:
1、EBADF 參數(shù)s 并非合法的socket 處理代碼
2、ENOTSOCK 參數(shù)s 為一文件描述詞, 非socket
3、ENOPROTOOPT 參數(shù)optname 指定的選項不正確.
4、EFAULT 參數(shù)optval 指針指向無法存取的內(nèi)存空間.
C語言getsockopt()函數(shù):取得socket 狀態(tài)
頭文件:
#include <sys/types.h> #include <sys/socket.h>
定義函數(shù):
int getsockopt(int s, int level, int optname, void* optval, socklen_t* optlen);
函數(shù)說明:getsockopt()會將參數(shù)s 所指定的socket 狀態(tài)返回. 參數(shù)optname 代表欲取得何種選項狀態(tài), 而參數(shù)optval 則指向欲保存結(jié)果的內(nèi)存地址, 參數(shù)optlen 則為該空間的大小. 參數(shù)level、optname 請參考setsockopt().
返回值:成功則返回0, 若有錯誤則返回-1, 錯誤原因存于errno
錯誤代碼:
1、EBADF 參數(shù)s 并非合法的socket 處理代碼
2、ENOTSOCK 參數(shù)s 為一文件描述詞, 非socket
3、ENOPROTOOPT 參數(shù)optname 指定的選項不正確
4、EFAULT 參數(shù)optval 指針指向無法存取的內(nèi)存空間
范例
#include <sys/types.h> #include <sys/socket.h> main() { int s; int optval; int optlen = sizeof(int); if((s = socket(AF_INET, SOCK_STREAM, 0)) < 0) perror("socket"); getsockopt(s, SOL_SOCKET, SO_TYPE, &optval, &optlen); printf("optval = %d\n", optval); close(s); }
執(zhí)行:
optval = 1 //SOCK_STREAM 的定義正是此值
相關(guān)文章
C語言超詳細(xì)講解結(jié)構(gòu)體與聯(lián)合體的使用
結(jié)構(gòu)體和聯(lián)合體用于描述事物的屬性,如一只鳥的信息,可能包括它的品種,體重,顏色,年齡等,接下來大家一起來詳細(xì)看看吧2022-05-05C語言中函數(shù)指針與軟件設(shè)計經(jīng)驗總結(jié)
今天小編就為大家分享一篇關(guān)于C語言中函數(shù)指針與軟件設(shè)計經(jīng)驗總結(jié),小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-12-12C/C++ Zlib庫封裝MyZip壓縮類的詳細(xì)過程
在軟件開發(fā)中,文件的壓縮和解壓縮是一項常見的任務(wù),而ZIP是一種被廣泛應(yīng)用的壓縮格式,本文將聚焦于一個簡化的C++實現(xiàn),通過分析代碼,我們將深入了解其設(shè)計和實現(xiàn)細(xì)節(jié),感興趣的朋友一起看看吧2023-11-11