socket 使用
来源:互联网 发布:云计算技术专业 编辑:程序博客网 时间:2024/05/24 06:34
创建一个socket的函数int socket(int domain, int type, int protocol){ sockfd = socket(domain, type, protocol);}domain指定使用何种的地址类型,里面的参数定义在linux的sys/socket.h中,比较常用的有:PF_INET(协议族),AF_INET(地址族): Ipv4网络协议PF_INET, AF_INET6: Ipv6网络协议AF_UNIX, AF_LOCAL 本地进程间通讯type参数的作用是设置通信的协议类型,可能的取值如下所示:SOCK_STREAM: 提供面向连接的稳定数据传输,即TCP协议。OOB: 在所有数据传送前必须使用connect()来建立连接状态。SOCK_DGRAM: 使用不连续不可靠的数据包连接。SOCK_SEQPACKET: 提供连续可靠的数据包连接。SOCK_RAW: 提供原始网络协议存取。SOCK_RDM: 提供可靠的数据包连接。SOCK_PACKET: 与网络驱动程序直接通信。参数protocol用来指定socket所使用的传输协议编号。这一参数通常不具体设置,一般设置为0即可。设置nonblock mode{ flag = fcntl(sockfd, F_GETFL, 0) fcntl(sockfd, F_SETFL, flag|O_NONBLOCK) //设置成非阻塞模式; fcntl(sockfd, F_SETFL, flags&~O_NONBLOCK); //设置成阻塞模式;}socket 的阻塞模式意味着必须要做完IO 操作(包括错误)才会返回。非阻塞模式下无论操作是否完成都会立刻返回,需要通过其他方式来判断具体操作是否成功。{ /* reuse the address */ /* 设置了reuseaddr后,服务程序停止后可立即重启*/ int32_t choice = 1; setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &choice, sizeof (int32_t)); /* 设置非阻塞模式,关闭Nagle算法,用来提高交互的实时性*/ int32_t choice = 1; setsockopt(sockfd, IPPROTO_TCP, TCP_NODELAY, &choice,sizeof(int32_t)); struct sockaddr_in addr; /* clean up */ memset(&addr,0,sizeof(struct sockaddr_in)); addr.sin_family = AF_INET; addr.sin_port = htons(port); /* 把点分十进制的IP转换成一个长整型(u_long)*/ if (service_type == SERVER) { /*如果是server的话,就用inet_addr("0.0.0.0"),也就是INADDR_ANY*/ addr.sin_addr.s_addr = htonl(INADDR_ANY); } else { addr.sin_addr.s_addr = inet_addr(addr); } /* bind the socket for internet socket */ bind(sockfd,(struct sockaddr *)&addr,sizeof(struct sockaddr));} 未完,待续epoll学习:https://www.cppfans.org/1418.html http://www.cnblogs.com/Anker/archive/2013/08/17/3263780.html
0 0
- socket使用
- 使用socket
- socket 使用
- Socket使用
- Socket使用
- socket 使用
- socket使用
- socket KeepAlive 使用笔记
- 使用Socket传送文件!
- java Socket使用示例
- 使用Socket API
- 使用Socket API
- 使用Socket API
- 使用Socket API
- Socket通讯使用IdTCPServer
- Socket使用的经验
- socket select()使用
- iPhone中使用socket
- HDU 2191 多重背包的二进制实现
- 【Java多线程】基础线程的等待与唤醒
- 解决同一个页面有多个datatable的显示重叠Begin,不兼容问题
- JAVA中使用IO流实现大文件的分裂与合并
- 友谊随笔——你是人间四月天(竹)
- socket 使用
- 学习笔记: 源码 blob.cpp 初见
- Gdiplus读取PND2
- ANDROID中点击事件的实现方式
- INSTALL_FAILED_PERMISSION_MODEL_DOWNGRADE
- optimize table优化mysql例子
- SystemUI启动流程及主体布局介绍
- 前端案例分享:简易手风琴
- linux下mysql数据库定时备份