使用函數(shù)getsockopt獲得發(fā)送緩沖區(qū)的長度。用法如下:
創(chuàng)新互聯(lián)建站網(wǎng)站建設(shè)公司,提供成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站,網(wǎng)頁設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);可快速的進(jìn)行網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,是專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!
int sockfd;
int val;
int len;
sockfd = socket (AF_INET, SOCK_STREAM, 0);
len = sizeof (val);
getsockopt( sockfd, SOL_SOCKET, SO_SNDBUF, val, len);
printf ("sndbuf len=%d\n", val);
在32位linux系統(tǒng)上發(fā)送緩沖區(qū)為16K ,可以使用setsockopt()修改,會(huì)影響網(wǎng)絡(luò)性能
你問的是兩個(gè)問題
第一個(gè)問題,send函數(shù)中第4個(gè)參數(shù)的含義,send函數(shù)原型
int PASCAL FAR send( SOCKET s, const char FAR* buf, int len, int
flags);
s:一個(gè)用于標(biāo)識(shí)已連接套接口的描述字。
buf:包含待發(fā)送數(shù)據(jù)的緩沖區(qū)。
len:緩沖區(qū)中數(shù)據(jù)的長度。
flags:調(diào)用執(zhí)行方式。
flags可以為0、MSG_DONTROUTE或者M(jìn)SG_OOB
0 :表示無特殊行為
MSG_DONTROUTE :指明數(shù)據(jù)不選徑,一個(gè)WINDOWS套接口供應(yīng)商可以忽略此標(biāo)志
MSG_OOB : 發(fā)送帶外數(shù)據(jù)(僅適用于SO_STREAM)
第二個(gè)問題,send函數(shù)返回值
因?yàn)閟end函數(shù)發(fā)送失敗時(shí)返回SOCKET_ERROR
SOCKET_ERROR宏定義為#define SOCKET_ERROR (-1)
所以該語句是判斷發(fā)送是否失敗。
語法上看:
P2=0xC0;//p2 與等于 0xc0,相當(dāng) P2 = P20XC0,
sendbyte(data1);//把data1變量作為參數(shù)傳給函數(shù)sendbyte,看函數(shù)名,似乎是要發(fā)送數(shù)據(jù)的樣子
P2|=0x01;//這句 相當(dāng)于 P2 = P2|0X01,作用是將P2的最低位值1