19---- Socket options
2014-09-13 08:47
176 查看
SOCKET 的一些选项的设置
通用选项: //// 可以通过 man 7 socket
SOL_SCKET:
SO_BROADCAST ---- 广播
SO_RCVBUF ----描述符号的发送缓冲大小
SO_SNDBUF -----描述符号的接收缓冲大小
SO_REUCSADDR -----地址反复绑定
SO_TYPE -----描述符号类型SOCK_STREAM(流)/SOCK_DGRAM(报文)
其他选项可以通过一下方式获取:
——————————————————————
$ man 7 socket --------------- socket选项
$ man 7 icmp ---------------icmp选项
$ man 7 ip --------------- ip选项
$ man 7 udp --------------- udp选项
$ man 7 tcp ---------------- tcp选项
—————————————————————
案例:
使用选项进行数据广播
case_A 发送
建立socket
设置广播选项
发送数据(广播方式发送)
case_B 接收
建立socket
绑定地址
接收数据
广播程序:
/// case_A.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
main()
{
int fd;
int opt=1;
int r;
struct sockaddr_in dr;
//1. 选项设置
fd = socket(AF_INET,SOCK_DGRAM,0);// AF_INET和PF_INET在这里都是一样的效果
if(fd==-1) printf("socket err:%m\n"),exit(-1);
r = setsockopt(fd,SOL_SOCKET,SO_BROADCAST,
&opt,sizeof(opt));
if(r==-1) printf("setsockopt err:%m\n"),exit(-1);
dr.sin_family = AF_INET;
dr.sin_port = htons(8888);
// 2. 使用广播IP地址
dr.sin_addr.s_addr = inet_addr("120.6.111.255");
r = sendto(fd,"I am MT",strlen("I am MT"),0,(struct sockaddr*)&dr,sizeof(dr));
if(r==-1) printf("sento err:%m\n"),exit(-1);
close(fd);
}
// case_B.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
main()
{
int fd;
int opt =1;
char buf[100];
int r;
struct sockaddr_in dr;
fd = socket(AF_INET,SOCK_DGRAM,0);
if(fd == -1) printf("socket err:%m\n"),exit(-1);
// 1. 选项
r = setsockopt(fd,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt));
if(r==-1) printf("setsockopt err:%m\n"),exit(-1);
dr.sin_family = AF_INET;
dr.sin_port = htons(8888);
// 2. 广播地址
dr.sin_addr.s_addr = inet_addr("120.6.111.255");
r = bind(fd,(struct sockaddr*)&dr,sizeof(dr));
if(r==-1) printf("bind err:%m\n"),exit(-1);
r = recv(fd,buf,100,0);
if(r >0)
{
buf[r] = 0;
printf("广播数据:%s\n",buf);
}
close(fd);
}
通用选项: //// 可以通过 man 7 socket
SOL_SCKET:
SO_BROADCAST ---- 广播
SO_RCVBUF ----描述符号的发送缓冲大小
SO_SNDBUF -----描述符号的接收缓冲大小
SO_REUCSADDR -----地址反复绑定
SO_TYPE -----描述符号类型SOCK_STREAM(流)/SOCK_DGRAM(报文)
其他选项可以通过一下方式获取:
——————————————————————
$ man 7 socket --------------- socket选项
$ man 7 icmp ---------------icmp选项
$ man 7 ip --------------- ip选项
$ man 7 udp --------------- udp选项
$ man 7 tcp ---------------- tcp选项
—————————————————————
案例:
使用选项进行数据广播
case_A 发送
建立socket
设置广播选项
发送数据(广播方式发送)
case_B 接收
建立socket
绑定地址
接收数据
广播程序:
/// case_A.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
main()
{
int fd;
int opt=1;
int r;
struct sockaddr_in dr;
//1. 选项设置
fd = socket(AF_INET,SOCK_DGRAM,0);// AF_INET和PF_INET在这里都是一样的效果
if(fd==-1) printf("socket err:%m\n"),exit(-1);
r = setsockopt(fd,SOL_SOCKET,SO_BROADCAST,
&opt,sizeof(opt));
if(r==-1) printf("setsockopt err:%m\n"),exit(-1);
dr.sin_family = AF_INET;
dr.sin_port = htons(8888);
// 2. 使用广播IP地址
dr.sin_addr.s_addr = inet_addr("120.6.111.255");
r = sendto(fd,"I am MT",strlen("I am MT"),0,(struct sockaddr*)&dr,sizeof(dr));
if(r==-1) printf("sento err:%m\n"),exit(-1);
close(fd);
}
// case_B.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
main()
{
int fd;
int opt =1;
char buf[100];
int r;
struct sockaddr_in dr;
fd = socket(AF_INET,SOCK_DGRAM,0);
if(fd == -1) printf("socket err:%m\n"),exit(-1);
// 1. 选项
r = setsockopt(fd,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt));
if(r==-1) printf("setsockopt err:%m\n"),exit(-1);
dr.sin_family = AF_INET;
dr.sin_port = htons(8888);
// 2. 广播地址
dr.sin_addr.s_addr = inet_addr("120.6.111.255");
r = bind(fd,(struct sockaddr*)&dr,sizeof(dr));
if(r==-1) printf("bind err:%m\n"),exit(-1);
r = recv(fd,buf,100,0);
if(r >0)
{
buf[r] = 0;
printf("广播数据:%s\n",buf);
}
close(fd);
}
相关文章推荐
- Java网络编程从入门到精通(19):套接字(Socket)的异常
- Java网络编程从入门到精通(19):套接字(Socket)的异常
- 19、在socket中使用域名
- unp #4 (reading notes) (socket options)
- Java网络编程从入门到精通(19):套接字(Socket)的异常
- Java网络编程(19):套接字(Socket)的异常
- socket ioctl socket options struct ifreq; struct ifconf
- IP-level Socket Options
- 19. 12. 3. 用socket读写 Read and write through socket
- Socket options SO_REUSEADDR and SO_REUSEPORT
- 黑马程序员_Java学习日记19_Socket编程1
- Java网络编程从入门到精通(19):套接字(Socket)的异常
- 网络编程之Socket Options
- muduo源码学习(19)-socket封装
- INFO: Header and Library Requirement When Set/Get Socket Options at the IPPROTO_IP Level
- Socket Configuration Options
- Linux Socket 学习笔记19-UDP广播服务器端
- Java Notes-14(DateAtHost Client, TinyHttpd Server, Socket Options)
- Socket
- 手把手教你玩转SOCKET模型之重叠I/O篇(上)