- 浏览: 265739 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
AndMacLinuXp:
试了下,不错!
printk内核调试 -
klose:
我引用你的文章,并做了简单的分析:这里贴出url:http:/ ...
linux系统调用fork, vfork, clone -
klose:
你上面提到的问题:free的问题。首先你可能疏忽了,stack ...
linux系统调用fork, vfork, clone -
qwe_rt:
HI ,非常nice的文章,在阅读过程中,我发现我的ubunt ...
linux手动添加开机启动的服务 -
suifeng:
谢谢分享, 受用中.
shell编程分支,循环
之前曾经提到过这个名词,套接口低潮限度。(以下都只针对TCP)
接收低潮限度(SO_RCVLOWAT):之前我们曾经使用过select函数,如果将套接口可读,也就是说套接口中有数据可以读出做为select的一个阻塞条件,则什么叫做有数据可读?其实就是指套接口中数据大小大于低潮限度。默认的低潮大小为1,也就是只要有数据到达就表示可读。
发送低潮限度(SO_SNDLOWAT):和上面一样,就是当你想对某个套接口执行write时候,如果空闲大小大于等于低潮限度就表示可写,也就是会从select函数返回。比如说下面的程序
#include "/programe/net/head.h"
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "unistd.h"
#include "sys/wait.h"
#include "sys/select.h"
#include "sys/time.h"
#define MAXSIZE 100
#define LISTENQ 10
int main(int argc, char ** argv) {
int listenfd, connfd;
socklen_t client_len;
struct sockaddr_in client_socket, serv_socket;
char send[MAXSIZE + 1], recv[MAXSIZE + 1];
listenfd = socket(AF_INET, SOCK_STREAM, 0);
bzero(&serv_socket, sizeof(serv_socket));
serv_socket.sin_family = AF_INET;
serv_socket.sin_addr.s_addr = htonl(INADDR_ANY);
serv_socket.sin_port = htons(atoi(argv[1]));
bind(listenfd, (struct sockaddr *)&serv_socket, sizeof(serv_socket));
listen(listenfd, LISTENQ);
client_len = sizeof(client_socket);
connfd = accept(listenfd, (struct sockaddr *)&client_socket, &client_len);
int recv_min_size = 6;
int flag = setsockopt(connfd, SOL_SOCKET, SO_RCVLOWAT, (void *)&recv_min_size, sizeof(int));
//设置接受低潮
int recv_min_size1;
socklen_t recv_min_len = sizeof(recv_min_size1);
getsockopt(connfd, SOL_SOCKET, SO_RCVLOWAT, (void *)&recv_min_size1, &recv_min_len);
if(flag >= 0)
printf("set SO_RCVLOWAT OK!!! SO_RCVLOWAT = %d\n", recv_min_size1);
else
printf("set SO_RCVLOWAT failed!!! SO_RCVLOWAT = %d\n", recv_min_size1);
for(;;) {
fd_set rest;
FD_ZERO(&rest);
FD_SET(1, &rest);
FD_SET(connfd, &rest);
int maxfdpl = 2;
if(maxfdpl < connfd + 1)
maxfdpl = connfd + 1;
int flag = select(maxfdpl, &rest, NULL, NULL, NULL); // 2
if(flag <= 0) {
printf("some error happend, sorry");
} else {
if(FD_ISSET(1, &rest)) {
int n = read(1, send, MAXSIZE);
send[n] = '\0';
write(connfd, send, n);
}
if(FD_ISSET(connfd, &rest)) {
int n = read(connfd, recv, MAXSIZE);
if(n == 0) {
printf("client closed\n");
break;
}
recv[n] = '\0';
printf("get message:%s", recv);
}
}
}
}
和之前的代码没有什么不同,只是增加了设置接受低潮。下面是客户端代码:
#include "/programe/net/head.h"
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "sys/select.h"
#define MAXSIZE 100
int main(int argc, char ** argv) {
int sockfd;
struct sockaddr_in serv_socket;
int maxfdpl;
char send[MAXSIZE], recv[MAXSIZE];
if(argc != 2) {
printf("please input port");
exit(1);
}
sockfd = socket(AF_INET, SOCK_STREAM, 0);
bzero(&serv_socket, sizeof(serv_socket));
serv_socket.sin_family = AF_INET;
serv_socket.sin_port = htons(atoi(argv[1]));
inet_pton(AF_INET, "192.168.1.235", &serv_socket.sin_addr);
connect(sockfd, (struct sockaddr *)&serv_socket, sizeof(serv_socket));
for(;;) {
fd_set rset;
FD_ZERO(&rset);
FD_SET(1, &rset);
FD_SET(sockfd, &rset);
maxfdpl = sockfd + 1;
select(maxfdpl, &rset, NULL, NULL, NULL); // 1
if(FD_ISSET(sockfd, &rset)) {
int n = read(sockfd, recv, MAXSIZE);
if(!n) {
printf("server closed\n");
break;
}
recv[n] = '\0';
printf("get message from server:%s\n", recv);
}
if(FD_ISSET(1, &rset)) {
int n = read(1, send, MAXSIZE);
send[n] = '\0';
write(sockfd, send, n);
}
}
close(sockfd);
exit(0);
}
运行就会发现如果你输入的字符个数少于6(包括回车),select会继续阻塞。(注:我测试了一下,低潮限度只是会对select造成影响,不会对read和write函数的阻塞造成影响)
发表评论
-
hdfs集群搭建
2014-05-11 17:19 991网上很多hadoop集群搭建的文章,我这里只写下hdfs,不 ... -
网站性能优化
2013-10-25 10:43 0好久没写了,最近一直在做些互联网的一些东西。下面介绍些性能优 ... -
html5学习网站
2011-07-29 14:55 894htm5:http://www.w3school.com.cn ... -
HTTP下载
2011-02-09 15:24 1055HTTP下载的关键是修改Content-Type。 C ... -
28.sniffer程序2
2010-07-01 17:51 1762对前面27中sniffer中的一 ... -
27. sniffer程序
2010-06-30 11:51 5903网络抓包,必需从数据链路层开始抓取,至于原因之前在原始套接口中 ... -
java 和 linux c udp通信的样例
2010-05-28 11:58 2458一个简单的例子 java段(客户端) package ... -
26.原始套接字
2010-05-12 16:45 1753一个小程序: //发送方 #include <sys ... -
25.cookies和session
2010-05-10 15:21 886原文出自:http://blog.csdn ... -
24.SOCKET模拟HTTP请求
2010-05-07 14:11 5313HTTP请求头部样例: GET http://www.bai ... -
23.广播
2010-04-29 16:34 935如果想发送广播到目前为止只能使用AF_INET, SOCK_D ... -
22.非阻塞connect
2010-04-28 11:36 2710connect非阻塞套接口时候,一般使用在以下几种情况: ... -
21.非阻塞I/O
2010-04-27 16:54 2069设置一个I/O成为非阻塞很简单,只需要: int val = ... -
20.辅助数据 和 传输描述字
2010-04-26 15:53 2059打开一个文件或者一个 ... -
19.unix域协议与TCP UDP不同之处
2010-04-22 13:46 2608之前说过一些区别,但基本对我们编程来说没有太多影响,但以下几个 ... -
18.unix域协议
2010-04-21 16:47 2616UNIX域协议并不是一个真正的协议族,它是用在同一台主机上进行 ... -
17.I/O函数recvmsg与sendmsg
2010-04-20 15:58 12415想对于之前的几个IO函 ... -
16.I/O函数
2010-04-20 13:51 1237最早使用的read与write函 ... -
15.服务器守护进程
2010-04-16 17:44 1388前面提到过的服务器都占有控制终端。而有些进程并不需要控制终端。 ... -
14.udp与connect
2010-04-13 16:41 3205UDP在调用sendto发送数据 ...
相关推荐
零售行业:奢侈品牌应对市场低潮.docx
Linux走出低潮.pdf
当工作处于低潮时.docx
国盛证券-纺织服饰行业2022年报&23Q1季报分析:穿越低潮,重启增长-230504.pdf
怎么满足生活的低潮 每天我都在 期待在地铁站遇见她 我在左,她在右 这是我自己的秘密 不晓得她背后是否有一样的故事 明天, 我应该鼓起勇气问她电话 结婚是给自由穿件棉衣 虽然有时候会不方便 但冬天...
电子元器件行业周报:智能手机低潮期已过 厂商开始追单.pdf
IT产业的低潮Linux应用的高潮.pdf
圆桌讨论线下教育融资低潮仍未过去解读.pdf
结束低潮迎来春天 看LCOS投影技术的发展.docx
全球每个地区都有其独特的气候条件,这些条件是根据不同的地形常数和大气动力学特征设置的。 这些功能在不同的时间尺度上具有可变性。 根据陆地非潮汐,短期变化来确定当地海平面变化非常复杂。...
教育资料完美版
基于理论最低潮面与平均低潮位的对应关系,综合调和分析及统计分析,以及《海道测量规范》中提出的方法,对我国东部沿海地区理论最低潮面与年平均低潮位及月平均低潮位进行相关分析。结果表明,研究区域理论最低潮面...
怎么满足生活的低潮 每天我都在 期待在地铁站遇见她 我在左,她在右 这是我自己的秘密 不晓得她背后是否有一样的故事 明天, 我应该鼓起勇气问她电话 结婚是给自由穿件棉衣 虽然有时候会不方便 但冬天的时候 我会...
11、专家系统的构成:由知识库和推理机(知识库由数据库和规则库两部分构成) 12、专家系统的建立:1,知识库2,推理机3,知识的表示4,专家系统开发语言5,专家 系统建立步骤。 13、专家控制:是智能控制的一个...
一样厅堂假设具有50dB的本底 噪声,包含外界传人的噪声与厅堂内的低语声或弗成幸免的动作所发出的噪声,因此节 目标低潮片段至少应有60dB的响度级。一样音乐节目动态范畴平均为40dB,因此节目标 高潮片段可达100dB。...
对21个站位理论最低低潮面、可能最低低潮面、略最低低潮面及英国海图深度基准面的空间分布特征及关系进行了计算分析,拟舍得出了辐射沙洲海域理论最低低潮面的经验关系式,利用该关系式计算分析了江苏省辐射沙洲海域...
这个系列也写了足足有一年多了,开始随便写写,后来越写越多,最后就成一个系列了。在这年里来,风风雨雨,体验了人生的种种无奈。曾经在人生的低潮时,厌弃过摄影。最后,能留下往日的一点记忆... --黑鬼汉 2008.12.11
调查区域共采集昆虫35444头,隶属于13目64科,按所含种数多少,主要的科有杆蝇科(42)、姬小蜂科(29)、金小蜂科(24)、茧蜂科(22)、姬蜂科(15)和缘腹细蜂科(12) ;主要的目有膜翅目(137)、双翅目(85)、鞘翅目(32)和半翅目...
第一代神经网络 单层感知机(Perceptrons)模型的局限性 Minsky & Papert的专著Perceptron(1969) 只能对线性可分的模式进行分类 解决不了异或问题 几乎宣判了这类模型的死刑,导致了随后多年NN研究的低潮 6 人工智能...