~ubuntu-branches/ubuntu/precise/udt/precise

« back to all changes in this revision

Viewing changes to src/channel.cpp

  • Committer: Package Import Robot
  • Author(s): Jon Bernard
  • Date: 2011-08-31 23:31:06 UTC
  • mfrom: (1.1.1 upstream)
  • Revision ID: package-import@ubuntu.com-20110831233106-zk73bs9s4izhtnk2
Tags: 4.9-1
* [0790269] New upstream version 4.9
* [166374a] Bump Standards-Version to 3.9.2, no changes necessary

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
/*****************************************************************************
2
 
Copyright (c) 2001 - 2009, The Board of Trustees of the University of Illinois.
 
2
Copyright (c) 2001 - 2011, The Board of Trustees of the University of Illinois.
3
3
All rights reserved.
4
4
 
5
5
Redistribution and use in source and binary forms, with or without
35
35
 
36
36
/****************************************************************************
37
37
written by
38
 
   Yunhong Gu, last updated 09/13/2008
 
38
   Yunhong Gu, last updated 01/27/2011
39
39
*****************************************************************************/
40
40
 
41
41
#ifndef WIN32
69
69
 
70
70
CChannel::CChannel():
71
71
m_iIPversion(AF_INET),
 
72
m_iSockAddrSize(sizeof(sockaddr_in)),
72
73
m_iSocket(),
73
74
m_iSndBufSize(65536),
74
75
m_iRcvBufSize(65536)
81
82
m_iSndBufSize(65536),
82
83
m_iRcvBufSize(65536)
83
84
{
 
85
   m_iSockAddrSize = (AF_INET == m_iIPversion) ? sizeof(sockaddr_in) : sizeof(sockaddr_in6);
84
86
}
85
87
 
86
88
CChannel::~CChannel()
101
103
 
102
104
   if (NULL != addr)
103
105
   {
104
 
      socklen_t namelen = (AF_INET == m_iIPversion) ? sizeof(sockaddr_in) : sizeof(sockaddr_in6);
 
106
      socklen_t namelen = m_iSockAddrSize;
105
107
 
106
108
      if (0 != bind(m_iSocket, addr, namelen))
107
109
         throw CUDTException(1, 3, NET_ERROR);
218
220
 
219
221
void CChannel::getSockAddr(sockaddr* addr) const
220
222
{
221
 
   socklen_t namelen = (AF_INET == m_iIPversion) ? sizeof(sockaddr_in) : sizeof(sockaddr_in6);
 
223
   socklen_t namelen = m_iSockAddrSize;
222
224
 
223
225
   getsockname(m_iSocket, addr, &namelen);
224
226
}
225
227
 
226
228
void CChannel::getPeerAddr(sockaddr* addr) const
227
229
{
228
 
   socklen_t namelen = (AF_INET == m_iIPversion) ? sizeof(sockaddr_in) : sizeof(sockaddr_in6);
 
230
   socklen_t namelen = m_iSockAddrSize;
229
231
 
230
232
   getpeername(m_iSocket, addr, &namelen);
231
233
}
250
252
   #ifndef WIN32
251
253
      msghdr mh;
252
254
      mh.msg_name = (sockaddr*)addr;
253
 
      mh.msg_namelen = (AF_INET == m_iIPversion) ? sizeof(sockaddr_in) : sizeof(sockaddr_in6);
 
255
      mh.msg_namelen = m_iSockAddrSize;
254
256
      mh.msg_iov = (iovec*)packet.m_PacketVector;
255
257
      mh.msg_iovlen = 2;
256
258
      mh.msg_control = NULL;
260
262
      int res = sendmsg(m_iSocket, &mh, 0);
261
263
   #else
262
264
      DWORD size = CPacket::m_iPktHdrSize + packet.getLength();
263
 
      int addrsize = (AF_INET == m_iIPversion) ? sizeof(sockaddr_in) : sizeof(sockaddr_in6);
 
265
      int addrsize = m_iSockAddrSize;
264
266
      int res = WSASendTo(m_iSocket, (LPWSABUF)packet.m_PacketVector, 2, &size, 0, addr, addrsize, NULL, NULL);
265
267
      res = (0 == res) ? size : -1;
266
268
   #endif
276
278
   }
277
279
 
278
280
   if (packet.getFlag())
 
281
   {
279
282
      for (int l = 0, n = packet.getLength() / 4; l < n; ++ l)
280
283
         *((uint32_t *)packet.m_pcData + l) = ntohl(*((uint32_t *)packet.m_pcData + l));
 
284
   }
281
285
 
282
286
   return res;
283
287
}
287
291
   #ifndef WIN32
288
292
      msghdr mh;   
289
293
      mh.msg_name = addr;
290
 
      mh.msg_namelen = (AF_INET == m_iIPversion) ? sizeof(sockaddr_in) : sizeof(sockaddr_in6);
 
294
      mh.msg_namelen = m_iSockAddrSize;
291
295
      mh.msg_iov = packet.m_PacketVector;
292
296
      mh.msg_iovlen = 2;
293
297
      mh.msg_control = NULL;
308
312
   #else
309
313
      DWORD size = CPacket::m_iPktHdrSize + packet.getLength();
310
314
      DWORD flag = 0;
311
 
      int addrsize = (AF_INET == m_iIPversion) ? sizeof(sockaddr_in) : sizeof(sockaddr_in6);
 
315
      int addrsize = m_iSockAddrSize;
312
316
 
313
317
      int res = WSARecvFrom(m_iSocket, (LPWSABUF)packet.m_PacketVector, 2, &size, &flag, addr, &addrsize, NULL, NULL);
314
318
      res = (0 == res) ? size : -1;
333
337
   }
334
338
 
335
339
   if (packet.getFlag())
 
340
   {
336
341
      for (int j = 0, n = packet.getLength() / 4; j < n; ++ j)
337
342
         *((uint32_t *)packet.m_pcData + j) = ntohl(*((uint32_t *)packet.m_pcData + j));
 
343
   }
338
344
 
339
345
   return packet.getLength();
340
346
}