Closed
Description
Hi,
My code uses two setsockopt
options that do not seem to be supported with emscripten (I am unsure if they can be):
SO_RCVBUF
SO_SNDBUF
Here is a test case for both (both throw Protocol not available
):
#include <sys/socket.h>
#include <netinet/in.h>
#include <errno.h>
#include <string.h>
#include <stdio.h>
int main() {
unsigned int netNum[4] = {0};
unsigned short port = 0;
signed int recvBufferSize = 32768;
signed int sendBufferSize = 32768;
signed int error = 0;
sockaddr address;
// UDP
signed int sock = socket(AF_INET, SOCK_DGRAM, 0);
// Create socket address from port and IP
memset(&address, 0, sizeof(sockaddr_in));
((sockaddr_in *) &address)->sin_family = AF_INET;
((sockaddr_in *) &address)->sin_port = htons(port);
((sockaddr_in *) &address)->sin_addr.s_addr = htonl(netNum[0]);
socklen_t addressSize = sizeof(sockaddr_in);
error = bind(sock, &address, addressSize);
if(error) printf("bind() errno %s\n", strerror(errno));
error = getsockname(sock, (sockaddr*) &address, &addressSize);
if(error) printf("getsockname() errno %s\n", strerror(errno));
error = setsockopt(sock, SOL_SOCKET, SO_RCVBUF, (char *) &recvBufferSize, sizeof(recvBufferSize));
if(error) printf("1 setsockopt() errno %s\n", strerror(errno));
error = setsockopt(sock, SOL_SOCKET, SO_SNDBUF, (char *) &sendBufferSize, sizeof(sendBufferSize));
if(error) printf("2 setsockopt() errno %s\n", strerror(errno));
return 0;
}
The bottom 2 printf
statements trigger.
I suspect I may hit a number of similar issues as this is older network code.
Thanks!