|
瑂ocketMyPLinux联盟
|
表头文件 | #include<sys/types.h>MyPLinux联盟 #include<sys/socket.h>MyPLinux联盟
|
定义函数 | int send(int s,const void * msg,int len,unsigned int falgs);MyPLinux联盟
|
函数说明 | send()用来将数据由指定的socket 传给对方主机。参数s为已建立好连接的socket。参数msg指向欲连线的数据内容,参数len则为数据长度。参数flags一般设0,其他数值定义如下MyPLinux联盟 MSG_OOB 传送的数据以out-of-band 送出。MyPLinux联盟 MSG_DONTROUTE 取消路由表查询MyPLinux联盟 MSG_DONTWAIT 设置为不可阻断运作MyPLinux联盟 MSG_NOSIGNAL 此动作不愿被SIGPIPE 信号中断。MyPLinux联盟
|
返回值 | 成功则返回实际传送出去的字符数,失败返回-1。错误原因存于errnoMyPLinux联盟
|
错误代码 | EBADF 参数s 非合法的socket处理代码。MyPLinux联盟 EFAULT 参数中有一指针指向无法存取的内存空间MyPLinux联盟 ENOTSOCK 参数s为一文件描述词,非socket。MyPLinux联盟 EINTR 被信号所中断。MyPLinux联盟 EAGAIN 此操作会令进程阻断,但参数s的socket为不可阻断。MyPLinux联盟 ENOBUFS 系统的缓冲内存不足MyPLinux联盟 ENOMEM 核心内存不足MyPLinux联盟 EINVAL 传给系统调用的参数不正确。MyPLinux联盟
|
范例 | 参考connect()MyPLinux联盟
|
| |
MyPLinux联盟
| MyPLinux联盟 sendmsg(经socket传送数据) |
相关函数 | send,sendto,recv,recvfrom,recvmsg,socketMyPLinux联盟
|
表头文件 | #include<sys/types.h>MyPLinux联盟 #include<sys/socket.h>MyPLinux联盟
|
定义函数 | int sendmsg(int s,const strcut msghdr *msg,unsigned int flags);MyPLinux联盟
|
函数说明 | sendmsg()用来将数据由指定的socket传给对方主机。参数s为已建立好连线的socket,如果利用UDP协议则不需经过连线操作。参数msg 指向欲连线的数据结构内容,参数flags一般默认为0,详细描述请参考send()。MyPLinux联盟 结构msghdr定义如下MyPLinux联盟 struct msghdrMyPLinux联盟 {MyPLinux联盟 void *msg_name; /*Address to send to /receive from . */MyPLinux联盟 socklen_t msg_namelen; /* Length of addres data */MyPLinux联盟 strcut iovec * msg_iov; /* Vector of data to send/receive into */MyPLinux联盟 size_t msg_iovlen; /* Number of elements in the vector */MyPLinux联盟 void * msg_control; /* Ancillary dat */MyPLinux联盟 size_t msg_controllen; /* Ancillary data buffer length */MyPLinux联盟 int msg_flags; /* Flags on received message */MyPLinux联盟 };MyPLinux联盟
|
返回值 | 成功则返回实际传送出去的字符数,失败返回-1,错误原因存于errnoMyPLinux联盟
|
错误代码 | EBADF 参数s 非合法的socket处理代码。MyPLinux联盟 EFAULT 参数中有一指针指向无法存取的内存空间MyPLinux联盟 ENOTSOCK 参数s为一文件描述词,非socket。MyPLinux联盟 EINTR 被信号所中断。MyPLinux联盟 EAGAIN 此操作会令进程阻断,但参数s的socket为不可阻断。MyPLinux联盟 ENOBUFS 系统的缓冲内存不足MyPLinux联盟 ENOMEM 核心内存不足MyPLinux联盟 EINVAL 传给系统调用的参数不正确。MyPLinux联盟
|
范例 | 参考sendto()。MyPLinux联盟
|
| |
MyPLinux联盟
| MyPLinux联盟 sendto(经socket传送数据) |
相关函数 | send , sendmsg,recv , recvfrom , socketMyPLinux联盟
|
表头文件 | #include < sys/types.h >MyPLinux联盟 #include < sys/socket.h >MyPLinux联盟
|
定义函数 | int sendto ( int s , const void * msg, int len, unsigned int flags, const MyPLinux联盟 struct sockaddr * to , int tolen ) ;MyPLinux联盟
|
函数说明 | sendto() 用来将数据由指定的socket传给对方主机。参数s为已建好连线的socket,如果利用UDP协议则不需经过连线操作。参数msg指向欲连线的数据内容,参数flags 一般设0,详细描述请参考send()。参数to用来指定欲传送的网络地址,结构sockaddr请参考bind()。参数tolen为sockaddr的结果长度。MyPLinux联盟
|
返回值 | 成功则返回实际传送出去的字符数,失败返回-1,错误原因存于errno 中。MyPLinux联盟
|
错误代码 | EBADF 参数s非法的socket处理代码。MyPLinux联盟 EFAULT 参数中有一指针指向无法存取的内存空间。MyPLinux联盟 WNOTSOCK canshu s为一文件描述词,非socket。MyPLinux联盟 EINTR 被信号所中断。MyPLinux联盟 EAGAIN 此动作会令进程阻断,但参数s的soket为补课阻断的。MyPLinux联盟 ENOBUFS 系统的缓冲内存不足。MyPLinux联盟 EINVAL 传给系统调用的参数不正确。MyPLinux联盟
|
范例 | #include < sys/types.h >MyPLinux联盟 #include < sys/socket.h >MyPLinux联盟 # include <netinet.in.h>MyPLinux联盟 #include <arpa.inet.h>MyPLinux联盟 #define PORT 2345 /*使用的port*/MyPLinux联盟 main(){MyPLinux联盟 int sockfd,len;MyPLinux联盟 struct sockaddr_in addr;MyPLinux联盟 char buffer[256];MyPLinux联盟 /*建立socket*/MyPLinux联盟 if(sockfd=socket (AF_INET,SOCK_DGRAM,0))<0){MyPLinux联盟 perror (“socket”);MyPLinux联盟 exit(1);MyPLinux联盟 }MyPLinux联盟 /*填写sockaddr_in 结构*/MyPLinux联盟 bzero ( &addr, sizeof(addr) );MyPLinux联盟 addr.sin_family=AF_INET;MyPLinux联盟 addr.sin_port=htons(PORT);MyPLinux联盟 addr.sin_addr=hton1(INADDR_ANY) ;MyPLinux联盟 if (bind(sockfd, &addr, sizeof(addr))<0){MyPLinux联盟 perror(“connect”);MyPLinux联盟 exit(1);MyPLinux联盟 }MyPLinux联盟 while(1){MyPLinux联盟 bezro(buffer,sizeof(buffer));MyPLinux联盟 len = recvfrom(socket,buffer,sizeof(buffer), 0 , &addr &addr_len);MyPLinux联盟 /*显示client端的网络地址*/MyPLinux联盟 printf(“receive from %sn “ , inet_ntoa( addr.sin_addr));MyPLinux联盟 /*将字串返回给client端*/MyPLinux联盟 sendto(sockfd,buffer,len,0,&addr,addr_len);”MyPLinux联盟 }MyPLinux联盟 }MyPLinux联盟
|
执行 | 请参考recvfrom()MyPLinux联盟
|
| |
MyPLinux联盟
| MyPLinux联盟 setprotoent(打开网络协议的数据文件) |
相关函数 | getprotobyname, getprotobynumber, endprotoentMyPLinux联盟
|
表头文件 | #include <netdb.h>MyPLinux联盟
|
定义函数 | void setprotoent (int stayopen);MyPLinux联盟
|
函数说明 | setprotoent()用来打开/etc/protocols, 如果参数stayopen值为1,则接下来的getprotobyname()或getprotobynumber()将不会自动关闭此文件。MyPLinux联盟
|
| |
MyPLinux联盟
| MyPLinux联盟 setservent(打开主机网络服务的数据文件) |
相关函数 | getservent, getservbyname, getservbyport, endserventMyPLinux联盟
|
Linux联盟收集整理 ,转贴请标明原始链接,如有任何疑问欢迎来本站Linux论坛讨论
|
|
|
|