#include <SocketDatagramImplBSD.h>
Inheritance diagram for vpr::SocketDatagramImplBSD:


Public Types | |
| typedef SocketImplBSD | Parent |
Public Methods | |
| SocketDatagramImplBSD () | |
| Default constructor. More... | |
| SocketDatagramImplBSD (const InetAddr &local_addr, const InetAddr &remote_addr) | |
| Constructs a datagram socket using the given addresses as defaults for communication channels. More... | |
| SocketDatagramImplBSD (const SocketDatagramImplBSD &sock) | |
| Copy constructor. More... | |
| vpr::ReturnStatus | recvfrom (void *msg, const vpr::Uint32 length, const int flags, vpr::InetAddr &from, vpr::Uint32 &bytes_read, const vpr::Interval timeout=vpr::Interval::NoTimeout) |
| Receives a message from the specified address. More... | |
| vpr::ReturnStatus | sendto (const void *msg, const vpr::Uint32 length, const int flags, const vpr::InetAddr &to, vpr::Uint32 &bytes_sent, const vpr::Interval timeout=vpr::Interval::NoTimeout) |
| Sends a message to the specified address. More... | |
Definition at line 58 of file SocketDatagramImplBSD.h.
|
|
Definition at line 61 of file SocketDatagramImplBSD.h. |
|
|
Default constructor. This sets the socket type to vpr::SocketTypes::DATAGRAM. Definition at line 63 of file SocketDatagramImplBSD.cpp. References vpr::SocketTypes::DATAGRAM.
00064 : SocketImplBSD(vpr::SocketTypes::DATAGRAM) 00065 { 00066 /* Do nothing. */ ; 00067 } |
|
||||||||||||
|
Constructs a datagram socket using the given addresses as defaults for communication channels.
Definition at line 69 of file SocketDatagramImplBSD.cpp. References vpr::SocketTypes::DATAGRAM, and vpr::InetAddr.
00071 : SocketImplBSD(local_addr, remote_addr, vpr::SocketTypes::DATAGRAM) 00072 { 00073 /* Do nothing. */ ; 00074 } |
|
|
Copy constructor.
Definition at line 76 of file SocketDatagramImplBSD.cpp. References vpr::SocketTypes::DATAGRAM, vpr::FileHandleImplUNIX::mBlocking, vpr::FileHandleImplUNIX::mFdesc, vpr::SocketImplBSD::mHandle, and vpr::FileHandleImplUNIX::mOpen.
00077 : SocketImplBSD(sock.mLocalAddr, sock.mRemoteAddr, SocketTypes::DATAGRAM) 00078 { 00079 mHandle = new FileHandleImplUNIX(sock.mHandle->getName()); 00080 mHandle->mFdesc = sock.mHandle->mFdesc; 00081 mHandle->mOpen = sock.mHandle->mOpen; 00082 mHandle->mBlocking = sock.mHandle->mBlocking; 00083 } |
|
||||||||||||||||||||||||||||
|
Receives a message from the specified address.
Definition at line 85 of file SocketDatagramImplBSD.cpp. References errno, vpr::ReturnStatus::Fail, vpr::InetAddrBSD::getAddressString, vpr::InetAddrBSD::getPort, vpr::SocketImplBSD::isBlocking, vpr::FileHandleImplUNIX::isReadable, vpr::SocketImplBSD::mBlockingFixed, vpr::FileHandleImplUNIX::mFdesc, vpr::SocketImplBSD::mHandle, vpr::SocketImplBSD::mRemoteAddr, vpr::ReturnStatus::NotConnected, vpr::ReturnStatus::setCode, vpr::InetAddrBSD::size, vpr::ReturnStatus::success, and vpr::ReturnStatus::WouldBlock.
00091 {
00092 #if defined(VPR_OS_IRIX) || defined(VPR_OS_HPUX)
00093 int fromlen;
00094 #else
00095 socklen_t fromlen;
00096 #endif
00097
00098 vpr::ReturnStatus retval;
00099
00100 retval = mHandle->isReadable(timeout);
00101
00102 if ( retval.success() )
00103 {
00104 ssize_t bytes;
00105
00106 mBlockingFixed = true;
00107
00108 fromlen = from.size();
00109 bytes = ::recvfrom(mHandle->mFdesc, msg, length, flags,
00110 (struct sockaddr*) &from.mAddr, &fromlen);
00111
00112 if ( bytes == -1 )
00113 {
00114 bytes_read = 0;
00115
00116 if ( errno == EAGAIN && ! isBlocking() )
00117 {
00118 retval.setCode(vpr::ReturnStatus::WouldBlock);
00119 }
00120 else
00121 {
00122 fprintf(stderr,
00123 "[vpr::SocketDatagramImplBSD] ERROR: Could not read from socket (%s:%hu): %s\n",
00124 mRemoteAddr.getAddressString().c_str(),
00125 mRemoteAddr.getPort(), strerror(errno));
00126 retval.setCode(vpr::ReturnStatus::Fail);
00127 }
00128 }
00129 else if ( bytes == 0 )
00130 {
00131 retval.setCode(vpr::ReturnStatus::NotConnected);
00132 }
00133 else
00134 {
00135 bytes_read = bytes;
00136 }
00137 }
00138
00139 return retval;
00140 }
|
|
||||||||||||||||||||||||||||
|
Sends a message to the specified address.
Definition at line 142 of file SocketDatagramImplBSD.cpp. References errno, vpr::ReturnStatus::Fail, vpr::InetAddrBSD::getAddressString, vpr::InetAddrBSD::getPort, vpr::SocketImplBSD::isBlocking, vpr::FileHandleImplUNIX::isWriteable, vpr::SocketImplBSD::mBlockingFixed, vpr::FileHandleImplUNIX::mFdesc, vpr::SocketImplBSD::mHandle, vpr::SocketImplBSD::mRemoteAddr, vpr::ReturnStatus::NotConnected, vpr::ReturnStatus::setCode, vpr::ReturnStatus::success, and vpr::ReturnStatus::WouldBlock.
00148 {
00149 vpr::ReturnStatus retval;
00150
00151 retval = mHandle->isWriteable(timeout);
00152
00153 if ( retval.success() )
00154 {
00155 ssize_t bytes;
00156
00157 mBlockingFixed = true;
00158
00159 bytes = ::sendto(mHandle->mFdesc, msg, length, flags,
00160 (struct sockaddr*) &to.mAddr, to.size());
00161
00162 if ( bytes == -1 )
00163 {
00164 bytes_sent = 0;
00165
00166 if ( errno == EAGAIN && ! isBlocking() )
00167 {
00168 retval.setCode(vpr::ReturnStatus::WouldBlock);
00169 }
00170 else
00171 {
00172 fprintf(stderr,
00173 "[vpr::SocketDatagramImplBSD] ERROR: Could not send to %s:%hu on socket (%s:%hu): %s\n",
00174 to.getAddressString().c_str(), to.getPort(),
00175 mRemoteAddr.getAddressString().c_str(),
00176 mRemoteAddr.getPort(), strerror(errno));
00177 retval.setCode(vpr::ReturnStatus::Fail);
00178 }
00179 }
00180 else if ( errno == EHOSTUNREACH || errno == EHOSTDOWN ||
00181 errno == ENETDOWN )
00182 {
00183 retval.setCode(vpr::ReturnStatus::NotConnected);
00184 }
00185 else
00186 {
00187 bytes_sent = bytes;
00188 }
00189 }
00190
00191 return retval;
00192 }
|
1.2.14 written by Dimitri van Heesch,
© 1997-2002