Bläddra i källkod

cmUdpPort.h/c:Added cmUdpLocalAddr(). Replaced cmUdpHostNameXXX() w/ cmUdpHostName().

master
kpl 11 år sedan
förälder
incheckning
875fce5f9d
2 ändrade filer med 27 tillägg och 18 borttagningar
  1. 22
    16
      cmUdpPort.c
  2. 5
    2
      cmUdpPort.h

+ 22
- 16
cmUdpPort.c Visa fil

42
   unsigned        recvCnt;
42
   unsigned        recvCnt;
43
   unsigned        queCbCnt;
43
   unsigned        queCbCnt;
44
   unsigned        errCnt;
44
   unsigned        errCnt;
45
+  struct sockaddr_in sockaddr;
45
   cmChar_t        ntopBuf[ INET_ADDRSTRLEN+1 ]; // use INET6_ADDRSTRLEN for IPv6
46
   cmChar_t        ntopBuf[ INET_ADDRSTRLEN+1 ]; // use INET6_ADDRSTRLEN for IPv6
47
+  cmChar_t        hnameBuf[ HOST_NAME_MAX+1 ];
46
 } cmUdp_t;
48
 } cmUdp_t;
47
 
49
 
48
 cmUdpH_t cmUdpNullHandle = cmSTATIC_NULL_HANDLE;
50
 cmUdpH_t cmUdpNullHandle = cmSTATIC_NULL_HANDLE;
186
 {
188
 {
187
   cmUdpRC_t rc;
189
   cmUdpRC_t rc;
188
 
190
 
189
-  struct sockaddr_in 	addr;
190
-
191
   cmUdp_t* p = _cmUdpHandleToPtr(h);
191
   cmUdp_t* p = _cmUdpHandleToPtr(h);
192
 
192
 
193
   if((rc = _cmUdpFinal(p)) != kOkUdpRC )
193
   if((rc = _cmUdpFinal(p)) != kOkUdpRC )
200
     return cmErrSysMsg(&p->err, kSockCreateFailUdpRC, errno, "Socket create failed." );	 
200
     return cmErrSysMsg(&p->err, kSockCreateFailUdpRC, errno, "Socket create failed." );	 
201
 	
201
 	
202
   // create the local address		
202
   // create the local address		
203
-  if((rc = _cmUdpInitAddr(p, NULL, port,  &addr )) != kOkUdpRC )
203
+  if((rc = _cmUdpInitAddr(p, NULL, port,  &p->sockaddr )) != kOkUdpRC )
204
     goto errLabel;
204
     goto errLabel;
205
 			
205
 			
206
   // bind the socket to a local address/port	
206
   // bind the socket to a local address/port	
207
-  if( (bind( p->sockH, (struct sockaddr*)&addr, sizeof(addr))) == cmUdp_SYS_ERR )
207
+  if( (bind( p->sockH, (struct sockaddr*)&p->sockaddr, sizeof(p->sockaddr))) == cmUdp_SYS_ERR )
208
   {
208
   {
209
     rc = cmErrSysMsg(&p->err,kSockBindFailUdpRC,errno,"Socket bind failed." );
209
     rc = cmErrSysMsg(&p->err,kSockBindFailUdpRC,errno,"Socket bind failed." );
210
     goto errLabel;
210
     goto errLabel;
287
 bool      cmUdpIsValid( cmUdpH_t h )
287
 bool      cmUdpIsValid( cmUdpH_t h )
288
 { return h.h != NULL; }
288
 { return h.h != NULL; }
289
 
289
 
290
+const struct sockaddr_in* cmUdpLocalAddr( cmUdpH_t h )
291
+{
292
+  cmUdp_t* p = _cmUdpHandleToPtr(h);
293
+  return &p->sockaddr;
294
+}
295
+
296
+
290
 
297
 
291
 cmUdpRC_t cmUdpConnect( cmUdpH_t h, const char* remoteAddr, cmUdpPort_t remotePort )
298
 cmUdpRC_t cmUdpConnect( cmUdpH_t h, const char* remoteAddr, cmUdpPort_t remotePort )
292
 {
299
 {
563
   return p->ntopBuf;
570
   return p->ntopBuf;
564
 }
571
 }
565
 
572
 
566
-unsigned  cmUdpHostNameMaxCharCount()
567
-{ return HOST_NAME_MAX+1; }
568
-
569
-cmUdpRC_t cmUdpHostName( cmChar_t* buf, unsigned bufByteCnt )
573
+const cmChar_t* cmUdpHostName( cmUdpH_t h )
570
 {
574
 {
571
-  if( bufByteCnt > 0 )
572
-    buf[0] = 0;
573
-
574
-  if( bufByteCnt < cmUdpHostNameMaxCharCount() )
575
-    return kBufTooSmallUdpRC;
575
+  cmUdp_t* p = _cmUdpHandleToPtr(h);
576
 
576
 
577
-  if( gethostname(buf,bufByteCnt-1) != 0 )
578
-    return kHostNameFailUdpRC;
577
+  _cmUdpClear_errno();
579
 
578
 
580
-  return kOkUdpRC;
579
+  if( gethostname(p->hnameBuf,HOST_NAME_MAX) != 0 )
580
+  {
581
+     cmErrSysMsg(&p->err,kHostNameFailUdpRC,errno, "gethostname() failed." );
582
+     return NULL;
583
+  }
584
+  
585
+  p->hnameBuf[HOST_NAME_MAX] = 0;
586
+  return p->hnameBuf;
581
 }
587
 }

+ 5
- 2
cmUdpPort.h Visa fil

62
   cmUdpRC_t cmUdpFinal( cmUdpH_t h );
62
   cmUdpRC_t cmUdpFinal( cmUdpH_t h );
63
   bool      cmUdpIsValid( cmUdpH_t h );
63
   bool      cmUdpIsValid( cmUdpH_t h );
64
 
64
 
65
+  const struct sockaddr_in* cmUdpLocalAddr( cmUdpH_t h );
66
+
65
   // Set a destination address for this socket. Once a destination address is set
67
   // Set a destination address for this socket. Once a destination address is set
66
   // the caller may use cmUdpSend() to communicate with the specified remote socket
68
   // the caller may use cmUdpSend() to communicate with the specified remote socket
67
   // without having to specify an destination address on each call.
69
   // without having to specify an destination address on each call.
120
 
122
 
121
   const cmChar_t*  cmUdpAddrToString( cmUdpH_t h, const struct sockaddr_in* addr );
123
   const cmChar_t*  cmUdpAddrToString( cmUdpH_t h, const struct sockaddr_in* addr );
122
 
124
 
123
-  unsigned  cmUdpHostNameMaxCharCount();
124
-  cmUdpRC_t cmUdpHostName( cmChar_t* buf, unsigned bufByteCnt );
125
+  const cmChar_t* cmUdpHostName( cmUdpH_t h );
126
+
127
+  
125
 
128
 
126
 #ifdef __cplusplus
129
 #ifdef __cplusplus
127
 }
130
 }

Laddar…
Avbryt
Spara