#include<errno.h>
#include<string.h>
#include<sys/types.h>
#include<sys/socket.h>
int main(){
int z;
int s[2];
char* cp ;
char buf[80];
z=socketpair(AF_LOCAL,SOCK_STREAM,0,s);
if(z==-1){
perror("create socket");exit(1);
}
z=write(s[1],cp="hello?",strlen(cp));
if(z<0){
perror("write"); exit(1);
}
z=read(s[0],buf,sizeof(buf));
if(z<0){
perror("read"); exit(1);
}
printf("s[0] receive message:%s\n",buf);
z=write(s[0],cp="go away!",8);
if(z<0){
perror("write"); exit(1);
}
z=read(s[1],buf,sizeof(buf));
if(z<0){
perror("read"); exit(1);
}
printf("s[1] receive message:%s\n",buf);
close(s[0]);
close(s[1]);
return 0;
}
运行结果:
s[0] receive message:hello?
s[1] receive message:go away!
从这个例子可以看出套接口socketpair可以实现双向通信
关闭套接口:
int shutdown(int s,int how);
how的取值:SHUT_RD,SHUT_WR,SHUT_RDWR(0,1,2)
有关套接口的close和shutdown的区别:
|
int s; int d ; d=dup(s); close(s); close(d); |
int s; int d; d=dup(s); shutdown(s,SHUT_RDWR); |
| 在第二个套接口关闭之后套接口才真正的关闭 | 即使s通过d打开,但是shutdown函数仍然立即将套接口彻底关闭 |

被折叠的 条评论
为什么被折叠?



