C語(yǔ)言設(shè)置和取得socket狀態(tài)的相關(guān)函數(shù)用法
C語(yǔ)言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ù)說(shuō)明:setsockopt()用來(lái)設(shè)置參數(shù)s 所指定的socket 狀態(tài). 參數(shù)level 代表欲設(shè)置的網(wǎng)絡(luò)層, 一般設(shè)成SOL_SOCKET 以存取socket 層. 參數(shù)optname 代表欲設(shè)置的選項(xiàng), 有下列幾種數(shù)值:
SO_DEBUG 打開(kāi)或關(guān)閉排錯(cuò)模式
SO_REUSEADDR 允許在bind ()過(guò)程中本地地址可重復(fù)使用
SO_TYPE 返回socket 形態(tài).
SO_ERROR 返回socket 已發(fā)生的錯(cuò)誤原因
SO_DONTROUTE 送出的數(shù)據(jù)包不要利用路由設(shè)備來(lái)傳輸.
SO_BROADCAST 使用廣播方式傳送
SO_SNDBUF 設(shè)置送出的暫存區(qū)大小
SO_RCVBUF 設(shè)置接收的暫存區(qū)大小
SO_KEEPALIVE 定期確定連線是否已終止.
SO_OOBINLINE 當(dāng)接收到OOB 數(shù)據(jù)時(shí)會(huì)馬上送至標(biāo)準(zhǔn)輸入設(shè)備
SO_LINGER 確保數(shù)據(jù)安全且可靠的傳送出去.
參數(shù) optval 代表欲設(shè)置的值, 參數(shù)optlen 則為optval 的長(zhǎng)度.
返回值:成功則返回0, 若有錯(cuò)誤則返回-1, 錯(cuò)誤原因存于errno.
附加說(shuō)明:
1、EBADF 參數(shù)s 并非合法的socket 處理代碼
2、ENOTSOCK 參數(shù)s 為一文件描述詞, 非socket
3、ENOPROTOOPT 參數(shù)optname 指定的選項(xiàng)不正確.
4、EFAULT 參數(shù)optval 指針指向無(wú)法存取的內(nèi)存空間.
C語(yǔ)言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ù)說(shuō)明:getsockopt()會(huì)將參數(shù)s 所指定的socket 狀態(tài)返回. 參數(shù)optname 代表欲取得何種選項(xiàng)狀態(tài), 而參數(shù)optval 則指向欲保存結(jié)果的內(nèi)存地址, 參數(shù)optlen 則為該空間的大小. 參數(shù)level、optname 請(qǐng)參考setsockopt().
返回值:成功則返回0, 若有錯(cuò)誤則返回-1, 錯(cuò)誤原因存于errno
錯(cuò)誤代碼:
1、EBADF 參數(shù)s 并非合法的socket 處理代碼
2、ENOTSOCK 參數(shù)s 為一文件描述詞, 非socket
3、ENOPROTOOPT 參數(shù)optname 指定的選項(xiàng)不正確
4、EFAULT 參數(shù)optval 指針指向無(wú)法存取的內(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)文章
Embarcadero?Dev-C++輸出中文亂碼問(wèn)題圖文詳解
Dev-C++(或者叫做 Dev-Cpp)是Windows環(huán)境下的一個(gè)輕量級(jí)C/C++ 集成開(kāi)發(fā)環(huán)境(IDE),下面這篇文章主要給大家介紹了關(guān)于Embarcadero?Dev-C++輸出中文亂碼問(wèn)題的相關(guān)資料,需要的朋友可以參考下2023-01-01
C語(yǔ)言中pthread_create函數(shù)實(shí)現(xiàn)向線程函數(shù)傳遞參數(shù)
本文主要介紹了C語(yǔ)言中pthread_create函數(shù)實(shí)現(xiàn)向線程函數(shù)傳遞參數(shù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05
C++靜態(tài)成員變量和靜態(tài)成員函數(shù)的使用方法總結(jié)
下面小編就為大家?guī)?lái)一篇C++靜態(tài)成員變量和靜態(tài)成員函數(shù)的使用方法總結(jié)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-01-01
C++實(shí)現(xiàn)旅館住宿管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)旅館住宿管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05
Qt槽函數(shù)會(huì)被執(zhí)行多次的問(wèn)題原因及解決方法
本文主要介紹了Qt槽函數(shù)會(huì)被執(zhí)行多次的問(wèn)題原因及解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01
vs2022重新編譯opencv-python?cuda加速時(shí)報(bào)錯(cuò)的問(wèn)題解決
本文主要介紹了vs2022重新編譯opencv-python?cuda加速時(shí)報(bào)錯(cuò),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04
C語(yǔ)言實(shí)現(xiàn)經(jīng)典windows游戲掃雷的示例代碼
今天我們會(huì)用C語(yǔ)言實(shí)現(xiàn)一個(gè)經(jīng)典的windows小游戲:掃雷。掃雷是一款單機(jī)小游戲,每次通關(guān)最高難度的關(guān)卡都會(huì)開(kāi)心好一陣?,F(xiàn)在學(xué)會(huì)了C語(yǔ)言,總算可以自己實(shí)現(xiàn)掃雷了。話不多說(shuō),咱們開(kāi)始吧2022-10-10
C++實(shí)現(xiàn)讀寫ini配置文件的示例代碼
配置文件的讀取是每個(gè)程序必備的功能,配置文件的格式多種多樣,例如:ini格式、json格式、xml格式等。其中屬ini格式最為簡(jiǎn)單,且應(yīng)用廣泛。本文和大家分享了C++讀寫ini配置文件的方法,需要的可以參考一下2023-05-05

