connectシステムコール


ソケットに接続するUNIXのconnectシステムコール。 機能の詳細は端末エミュレータ上でman 2 connectを実行しmanページを参照せよ。

connectシステムコールを使ってUNIXローカル通信用のソケットに接続するサンプルdoconnect.cを示す。

connectシステムコールの使用例
/*******************/
/*** 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);
}


中村 一博 E-mail: nakamura@is.nagoya-u.ac.jp