Convert endianess before passing buffers to setsockopt.

This commit is contained in:
jjsat 2017-09-03 18:51:43 +02:00 committed by Ivan
parent 634c411946
commit 4558f93f92
1 changed files with 23 additions and 23 deletions

View File

@ -581,7 +581,7 @@ namespace sys_net
#ifdef _WIN32 #ifdef _WIN32
case OP_SO_NBIO: case OP_SO_NBIO:
{ {
unsigned long mode = *(unsigned long*)optval.get_ptr(); u_long mode = *static_cast<const be_t<u32>*>(optval.get_ptr());
ret = ioctlsocket(sock->s, FIONBIO, &mode); ret = ioctlsocket(sock->s, FIONBIO, &mode);
break; break;
} }
@ -606,38 +606,38 @@ namespace sys_net
#endif #endif
case OP_SO_SNDBUF: case OP_SO_SNDBUF:
{ {
u32 sendbuff = *(u32*)optval.get_ptr(); const u32 param = *static_cast<const be_t<u32>*>(optval.get_ptr());
ret = ::setsockopt(sock->s, SOL_SOCKET, SO_SNDBUF, (const char*)&sendbuff, sizeof(sendbuff)); ret = ::setsockopt(sock->s, SOL_SOCKET, SO_SNDBUF, (const char*)&param, sizeof(param));
break; break;
} }
case OP_SO_RCVBUF: case OP_SO_RCVBUF:
{ {
u32 recvbuff = *(u32*)optval.get_ptr(); const u32 param = *static_cast<const be_t<u32>*>(optval.get_ptr());
ret = ::setsockopt(sock->s, SOL_SOCKET, SO_RCVBUF, (const char*)&recvbuff, sizeof(recvbuff)); ret = ::setsockopt(sock->s, SOL_SOCKET, SO_RCVBUF, (const char*)&param, sizeof(param));
break; break;
} }
case OP_SO_SNDTIMEO: case OP_SO_SNDTIMEO:
{ {
u32 sendtimeout = *(u32*)optval.get_ptr(); const u32 param = *static_cast<const be_t<u32>*>(optval.get_ptr());
ret = ::setsockopt(sock->s, SOL_SOCKET, SO_SNDTIMEO, (char*)&sendtimeout, sizeof(sendtimeout)); ret = ::setsockopt(sock->s, SOL_SOCKET, SO_SNDTIMEO, (const char*)&param, sizeof(param));
break; break;
} }
case OP_SO_RCVTIMEO: case OP_SO_RCVTIMEO:
{ {
u32 recvtimeout = *(u32*)optval.get_ptr(); const u32 param = *static_cast<const be_t<u32>*>(optval.get_ptr());
ret = ::setsockopt(sock->s, SOL_SOCKET, SO_RCVTIMEO, (char*)&recvtimeout, sizeof(recvtimeout)); ret = ::setsockopt(sock->s, SOL_SOCKET, SO_RCVTIMEO, (const char*)&param, sizeof(param));
break; break;
} }
case OP_SO_SNDLOWAT: case OP_SO_SNDLOWAT:
{ {
u32 sendlowmark = *(u32*)optval.get_ptr(); const u32 param = *static_cast<const be_t<u32>*>(optval.get_ptr());
ret = ::setsockopt(sock->s, SOL_SOCKET, SO_SNDLOWAT, (char*)&sendlowmark, sizeof(sendlowmark)); ret = ::setsockopt(sock->s, SOL_SOCKET, SO_SNDLOWAT, (const char*)&param, sizeof(param));
break; break;
} }
case OP_SO_RCVLOWAT: case OP_SO_RCVLOWAT:
{ {
u32 recvlowmark = *(u32*)optval.get_ptr(); const u32 param = *static_cast<const be_t<u32>*>(optval.get_ptr());
ret = ::setsockopt(sock->s, SOL_SOCKET, SO_RCVLOWAT, (char*)&recvlowmark, sizeof(recvlowmark)); ret = ::setsockopt(sock->s, SOL_SOCKET, SO_RCVLOWAT, (const char*)&param, sizeof(param));
break; break;
} }
case OP_SO_USECRYPTO: case OP_SO_USECRYPTO:
@ -654,14 +654,14 @@ namespace sys_net
} }
case OP_SO_BROADCAST: case OP_SO_BROADCAST:
{ {
u32 enablebroadcast = *(u32*)optval.get_ptr(); const u32 param = *static_cast<const be_t<u32>*>(optval.get_ptr());
ret = ::setsockopt(sock->s, SOL_SOCKET, SO_BROADCAST, (char*)&enablebroadcast, sizeof(enablebroadcast)); ret = ::setsockopt(sock->s, SOL_SOCKET, SO_BROADCAST, (const char*)&param, sizeof(param));
break; break;
} }
case OP_SO_REUSEADDR: case OP_SO_REUSEADDR:
{ {
u32 reuseaddr = *(u32*)optval.get_ptr(); const u32 param = *static_cast<const be_t<u32>*>(optval.get_ptr());
ret = ::setsockopt(sock->s, SOL_SOCKET, SO_REUSEADDR, (char*)&reuseaddr, sizeof(reuseaddr)); ret = ::setsockopt(sock->s, SOL_SOCKET, SO_REUSEADDR, (const char*)&param, sizeof(param));
break; break;
} }
default: default:
@ -675,11 +675,11 @@ namespace sys_net
case OP_TCP_NODELAY: case OP_TCP_NODELAY:
{ {
#ifdef _WIN32 #ifdef _WIN32
const char delay = *(char*)optval.get_ptr(); const u32 param = *static_cast<const be_t<u32>*>(optval.get_ptr());
ret = ::setsockopt(sock->s, IPPROTO_TCP, TCP_NODELAY, &delay, sizeof(delay)); ret = ::setsockopt(sock->s, IPPROTO_TCP, TCP_NODELAY, (const char*)&param, sizeof(param));
#else #else
u32 delay = *(u32*)optval.get_ptr(); const u32 param = *static_cast<const be_t<u32>*>(optval.get_ptr());
ret = ::setsockopt(sock->s, IPPROTO_TCP, TCP_NODELAY, &delay, optlen); ret = ::setsockopt(sock->s, IPPROTO_TCP, TCP_NODELAY, (const char*)&param, sizeof(param));
#endif #endif
break; break;
} }
@ -689,8 +689,8 @@ namespace sys_net
#ifdef _WIN32 #ifdef _WIN32
libnet.warning("TCP_MAXSEG can't be set on Windows."); libnet.warning("TCP_MAXSEG can't be set on Windows.");
#else #else
u32 maxseg = *(u32*)optval.get_ptr(); const u32 param = *static_cast<const be_t<u32>*>(optval.get_ptr());
ret = ::setsockopt(sock->s, IPPROTO_TCP, TCP_MAXSEG, &maxseg, optlen); ret = ::setsockopt(sock->s, IPPROTO_TCP, TCP_MAXSEG, (const char*)&param, sizeof(param));
#endif #endif
break; break;
} }