Browse Source

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

master
kpl 11 years ago
parent
commit
875fce5f9d
2 changed files with 27 additions and 18 deletions
  1. 22
    16
      cmUdpPort.c
  2. 5
    2
      cmUdpPort.h

+ 22
- 16
cmUdpPort.c View File

@@ -42,7 +42,9 @@ typedef struct
42 42
   unsigned        recvCnt;
43 43
   unsigned        queCbCnt;
44 44
   unsigned        errCnt;
45
+  struct sockaddr_in sockaddr;
45 46
   cmChar_t        ntopBuf[ INET_ADDRSTRLEN+1 ]; // use INET6_ADDRSTRLEN for IPv6
47
+  cmChar_t        hnameBuf[ HOST_NAME_MAX+1 ];
46 48
 } cmUdp_t;
47 49
 
48 50
 cmUdpH_t cmUdpNullHandle = cmSTATIC_NULL_HANDLE;
@@ -186,8 +188,6 @@ cmUdpRC_t cmUdpInit(
186 188
 {
187 189
   cmUdpRC_t rc;
188 190
 
189
-  struct sockaddr_in 	addr;
190
-
191 191
   cmUdp_t* p = _cmUdpHandleToPtr(h);
192 192
 
193 193
   if((rc = _cmUdpFinal(p)) != kOkUdpRC )
@@ -200,11 +200,11 @@ cmUdpRC_t cmUdpInit(
200 200
     return cmErrSysMsg(&p->err, kSockCreateFailUdpRC, errno, "Socket create failed." );	 
201 201
 	
202 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 204
     goto errLabel;
205 205
 			
206 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 209
     rc = cmErrSysMsg(&p->err,kSockBindFailUdpRC,errno,"Socket bind failed." );
210 210
     goto errLabel;
@@ -287,6 +287,13 @@ cmUdpRC_t cmUdpFinal( cmUdpH_t h )
287 287
 bool      cmUdpIsValid( cmUdpH_t h )
288 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 298
 cmUdpRC_t cmUdpConnect( cmUdpH_t h, const char* remoteAddr, cmUdpPort_t remotePort )
292 299
 {
@@ -563,19 +570,18 @@ const cmChar_t* cmUdpAddrToString( cmUdpH_t h, const struct sockaddr_in* addr )
563 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 View File

@@ -62,6 +62,8 @@ extern "C" {
62 62
   cmUdpRC_t cmUdpFinal( cmUdpH_t h );
63 63
   bool      cmUdpIsValid( cmUdpH_t h );
64 64
 
65
+  const struct sockaddr_in* cmUdpLocalAddr( cmUdpH_t h );
66
+
65 67
   // Set a destination address for this socket. Once a destination address is set
66 68
   // the caller may use cmUdpSend() to communicate with the specified remote socket
67 69
   // without having to specify an destination address on each call.
@@ -120,8 +122,9 @@ extern "C" {
120 122
 
121 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 129
 #ifdef __cplusplus
127 130
 }

Loading…
Cancel
Save