ソケットに接続するUNIXのconnectシステムコール。 機能の詳細は端末エミュレータ上でman 2 connectを実行しmanページを参照せよ。
connectシステムコールを使ってUNIXローカル通信用のソケットに接続するサンプルdoconnect.cを示す。
/*******************/ /*** doconnect.c ***/ /*******************/ #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/socket.h> #include <sys/un.h> int main() { int s; int addrlength; char write_buf[1024]; /***************************************************************/ /* ソケットアドレス UNIX */ /***************************************************************/ /* struct sockaddr_un { */ /* sa_family_t sun_family; /* AF_UNIX */ /* char sun_path[UNIX_PATH_MAX]; /* pathname */ /* }; */ /***************************************************************/ struct sockaddr_un addr; /****************************************/ /* ソケット、通信のための端点の作成 */ /* PF_UNIX: UNIX ローカル通信 */ /* SOCK_STREAM: 順序性と信頼性があり、 */ /* 双方向の、接続された */ /* バ イ ト・ ス ト リーム */ /****************************************/ s = socket(PF_UNIX, SOCK_STREAM, 0); if (s == -1) { printf("Can not create socket.\n"); exit(1); } /******************************/ /* 接続先アドレスの設定 */ /* AF_UNIX: UNIX ローカル通信 */ /* 名前: mysocket */ /******************************/ addr.sun_family = AF_UNIX; strcpy(addr.sun_path, "mysocket"); /**********************/ /* ソケットに接続する */ /**********************/ addrlength = sizeof(addr); if (connect(s, (struct sockaddr *)&addr, addrlength) == -1) { printf("Can not initiate a connection.\n"); exit(1); } printf("connect.\n"); /********************************/ /* connect した */ /* ソケットへのデータの書き込み */ /********************************/ sprintf(write_buf, "(^_^)/from client"); write(s, write_buf, strlen(write_buf)+1); printf("write_buf=%s\n", write_buf); /**********************/ /* ソケットのクローズ */ /**********************/ shutdown(s, 2); close(s); } |