毕业论文

当前位置: 毕业论文 > 范文 >

socketpair()套接字用法例子和理解

时间:2021-03-09 13:00来源:优尔论文
由套接字sock[1]发数据到本地主机,由套接字sock[0]接收发送过来的数据。

#include <sys/types.h>

#include <sys/socket.h>

int socketpair(int d, int type, int protocol, int sv[2]);

socketpair()函数用于创建一对无名的、相互连接的套接子。 

如果函数成功,则返回0,创建好的套接字分别是sv[0]和sv[1];否则返回-1,错误码保存于errno中。

 

基本用法: 

1. 这对套接字可以用于全双工通信,每一个套接字既可以读也可以写。例如,可以往sv[0]中写,从sv[1]中读;或者从sv[1]中写,从sv[0]中读; 

2. 如果往一个套接字(如sv[0])中写入后,再从该套接字读时会阻塞,只能在另一个套接字中(sv[1])上读成功; 

3. 读、写操作可以位于同一个进程,也可以分别位于不同的进程,如父子进程。如果是父子进程时,一般会功能分离,一个进程用来读,一个用来写。因为文件描述副sv[0]和sv[1]是进程共享的,所以读的进程要关闭写描述符, 反之,写的进程关闭读描述符。 

读写操作位于同一进程

#include <stdio.h> 

#include <string.h> 

#include <unistd.h> 

#include <sys/types.h> 

#include <error.h> 

#include <errno.h> 

#include <sys/socket.h> 

#include <stdlib.h> 

 

const char* str = "SOCKET PAIR TEST.";

 

int main(int argc, char* argv[]){

    char buf[128] = {0};

    int socket_pair[2]; 

    pid_t pid; 

 

    if(socketpair(AF_UNIX, SOCK_STREAM, 0, socket_pair) == -1 ) { 

        printf("Error, socketpair create failed, errno(%d): %s\n", errno, strerror(errno));

        return EXIT_FAILURE; 

    } 

 

    int size = write(socket_pair[0], str, strlen(str));

    //可以读取成功;

    read(socket_pair[1], buf, size);

    printf("Read result: %s\n",buf);

    return EXIT_SUCCESS;    

读写操作位于不同进程

 

#include <stdio.h> 

#include <string.h> 

#include <unistd.h> 

#include <sys/types.h> 

#include <error.h> 

#include <errno.h> 

#include <sys/socket.h> 

#include <stdlib.h> 

 

const char* str = "SOCKET PAIR TEST.";

 

int main(int argc, char* argv[]){

    char buf[128] = {0};

    int socket_pair[2]; 

    pid_t pid; 

 

    if(socketpair(AF_UNIX, SOCK_STREAM, 0, socket_pair) == -1 ) { 

        printf("Error, socketpair create failed, errno(%d): %s\n", errno, strerror(errno));

        return EXIT_FAILURE; 

    } 

 

    pid = fork();

    if(pid < 0) {

        printf("Error, fork failed, errno(%d): %s\n", errno, strerror(errno));

        return EXIT_FAILURE;

    } else if(pid > 0) {

        //关闭另外一个套接字

        close(socket_pair[1]);

        int size = write(socket_pair[0], str, strlen(str)); socketpair()套接字用法例子和理解:http://www.youerw.com/fanwen/lunwen_71106.html

------分隔线----------------------------
推荐内容