createSocket

此方法會建立新的 Socket。

簽章
int RiCOSSocket_createSocket (RiCOSSocket * const me,
   const char *SocketAddress, unsigned int nSocketPort);
參數
me

RiCOSSocket 物件。

SocketAddress

Socket 位址。該位址可以設為字串主機名稱。 預設值是 NULL。

nSocketPort

Socket 埠號。預設值是 0。

傳回

Socket 建立狀態。可能的值如下:

範例
int RiCOSSocket_createSocket(RiCOSSocket * const me,
   const char * SocketAddress, unsigned int nSocketPort)
{
   static struct sockaddr_in   addr;
   int proto;
   char hostName[128];
   int rvStat;

   if (me == NULL) {return 0;}

   if (nSocketPort == 0) {
      nSocketPort = 6423;
   }

   addr.sin_family = AF_INET;
   proto = IPPROTO_TCP;
   (void)gethostname(hostName, sizeof(hostName)-1);

   if (NULL != SocketAddress && strlen(SocketAddress) 
      != 0) {
      if (!strcmp(hostName, SocketAddress)) {
         SocketAddress = NULL;}
      else {
         (void)strcpy(hostName, SocketAddress);
         addr.sin_addr.s_addr = inet_addr(hostName);
         if (((unsigned long)ERROR) ==
            addr.sin_addr.s_addr) {
            addr.sin_addr.s_addr =
               hostGetByName(hostName);
         }
         if (((unsigned long)ERROR) ==
            addr.sin_addr.s_addr) {
            fprintf(stderr, "Could not get the address 
               of host '%s'\n", hostName);
            return 0;
         }
      }
   }   
   if (NULL == SocketAddress || strlen(SocketAddress) 
      == 0) {
      addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
   }

   #ifdef unix
      endprotoent();
   #endif /* unix */   

   addr.sin_port = htons((u_short)nSocketPort);   
   if ((me->theSock = socket(AF_INET, SOCK_STREAM,
      proto)) == -1) {
      fprintf(stderr,"Could not create socket\n");
      me->theSock = 0;
      return 0;
   }
   while ((rvStat = connect(me->theSock, 
      (struct sockaddr *)&addr, sizeof(addr))) ==
      SOCKET_ERROR && (errno == EINTR));
      if (SOCKET_ERROR == rvStat) {
         fprintf(stderr, "Could not connect to server 
            at %s port %d\n Error No. : %d\n", hostName,
            (int)nSocketPort, errno);
      return 0;
   }   
   return 1;}

回饋