Jump to content

setsockopt function


photo

Recommended Posts

Is there the function such as setsockopt in unigine's api?

 

when I use UnigineStreams for socket instead of winsock2, I don't know how to change option of socket.

if (setsockopt(udpsock, SOL_SOCKET, SO_REUSEADDR, (char*)&(bReuseAddr), sizeof(bReuseAddr)) < 0)
	{
		goto CLEAR_RESOURCE_2;
	}

	// Specify the Receive timeout
	if (setsockopt(udpsock, SOL_SOCKET, SO_RCVTIMEO, (char*)&(pSockInfo->nTimeOut), sizeof(pSockInfo->nTimeOut)) < 0) 
	{
        goto CLEAR_RESOURCE_2;
	}

	// buffer size
	if (setsockopt(udpsock, SOL_SOCKET, SO_RCVBUF,  (char*)&(pSockInfo->nBufferSize), sizeof(pSockInfo->nBufferSize)) < 0) 
	{
		goto CLEAR_RESOURCE_2;
	}
Link to comment

Hello! 

No, the UnigineSocket wrapper does not allow you to set your parameters. You write udpsock = unigine_socket->getFD() and use setsockopt manualy;

 

or you can use wrapper methods:

we set SO_REUSEADDR with 1 when you call:
1. listenMulticastGroup
2. bind

int reuseaddr = 1;
setsockopt(data->fd, SOL_SOCKET, SO_REUSEADDR, &reuseaddr, sizeof(reuseaddr))

we set SO_RCVBUF when you call 
1.send(int)
2.recv(int)

int send(int size)
{
	assert(data->fd != -1 && "Socket::send(): socket is not opened");
	if (setsockopt(data->fd, SOL_SOCKET, SO_SNDBUF, (char *)&size, sizeof(size)) == -1)
		return 0;
	return 1;
}

int recv(int size) 
{
	assert(data->fd != -1 && "Socket::recv(): socket is not opened");
	if (setsockopt(data->fd, SOL_SOCKET, SO_RCVBUF, (char *)&size, sizeof(size)) == -1)
		return 0;
	return 1;
}

 

SO_RCVTIMEO we do not set anywhere.

 

Link to comment
×
×
  • Create New...