mirror of
git://source.winehq.org/git/wine.git
synced 2024-10-31 12:19:49 +00:00
ws2_32: Use a helper function to set the IPX packet type.
This commit is contained in:
parent
b26ffddc8f
commit
2d4adfc49e
1 changed files with 31 additions and 22 deletions
|
@ -1159,6 +1159,36 @@ convert_socktype_u2w(int unixsocktype) {
|
|||
return -1;
|
||||
}
|
||||
|
||||
static int set_ipx_packettype(int sock, int ptype)
|
||||
{
|
||||
#ifdef HAS_IPX
|
||||
int fd = get_sock_fd( sock, 0, NULL ), ret = 0;
|
||||
TRACE("trying to set IPX_PTYPE: %d (fd: %d)\n", ptype, fd);
|
||||
|
||||
/* We try to set the ipx type on ipx socket level. */
|
||||
#ifdef SOL_IPX
|
||||
if(setsockopt(fd, SOL_IPX, IPX_TYPE, &ptype, sizeof(ptype)) == -1)
|
||||
{
|
||||
ERR("IPX: could not set ipx option type; expect weird behaviour\n");
|
||||
ret = SOCKET_ERROR;
|
||||
}
|
||||
#else
|
||||
{
|
||||
struct ipx val;
|
||||
/* Should we retrieve val using a getsockopt call and then
|
||||
* set the modified one? */
|
||||
val.ipx_pt = ptype;
|
||||
setsockopt(fd, 0, SO_DEFAULT_HEADERS, &val, sizeof(struct ipx));
|
||||
}
|
||||
#endif
|
||||
release_sock_fd( sock, fd );
|
||||
return ret;
|
||||
#else
|
||||
WARN("IPX support is not enabled, can't set packet type\n");
|
||||
return SOCKET_ERROR;
|
||||
#endif
|
||||
}
|
||||
|
||||
/* ----------------------------------- API -----
|
||||
*
|
||||
* Init / cleanup / error checking.
|
||||
|
@ -4772,28 +4802,7 @@ int WINAPI WS_setsockopt(SOCKET s, int level, int optname,
|
|||
switch(optname)
|
||||
{
|
||||
case IPX_PTYPE:
|
||||
fd = get_sock_fd( s, 0, NULL );
|
||||
TRACE("trying to set IPX_PTYPE: %d (fd: %d)\n", *(const int*)optval, fd);
|
||||
|
||||
/* We try to set the ipx type on ipx socket level. */
|
||||
#ifdef SOL_IPX
|
||||
if(setsockopt(fd, SOL_IPX, IPX_TYPE, optval, optlen) == -1)
|
||||
{
|
||||
ERR("IPX: could not set ipx option type; expect weird behaviour\n");
|
||||
release_sock_fd( s, fd );
|
||||
return SOCKET_ERROR;
|
||||
}
|
||||
#else
|
||||
{
|
||||
struct ipx val;
|
||||
/* Should we retrieve val using a getsockopt call and then
|
||||
* set the modified one? */
|
||||
val.ipx_pt = *optval;
|
||||
setsockopt(fd, 0, SO_DEFAULT_HEADERS, &val, sizeof(struct ipx));
|
||||
}
|
||||
#endif
|
||||
release_sock_fd( s, fd );
|
||||
return 0;
|
||||
return set_ipx_packettype(s, *(int*)optval);
|
||||
|
||||
case IPX_FILTERPTYPE:
|
||||
/* Sets the receive filter packet type, at the moment we don't support it */
|
||||
|
|
Loading…
Reference in a new issue