bsd-sockets

Wrapping BSD select() with JNA

I need to wrap a BSD-like C socket API to Java with JNA. It has basically the same functions as standard BSD socket API. Wrapping select() is problematic because of the fd_set-structure required in its arguments and the FD_* masking functions (macros) that are needed to handle fd_sets. I tried to crawl through the header files (e.g. sys...

How to set different timeouts for each socket that select() monitors?

I am currently using the BSD sockets API. I would like to use the select() function to monitor (a) the listener socket which waits for new connections using accept(), and (b) all the client sockets created via accept() or connect(). I want the listener socket to not have any timeout, and I want each client socket to have a timeout of 120...

getpeername() doesn't work with connections to localhost

EDIT: Restating the problem, if I am listening to port 54321 and a local process listening to port 12345 connects to me, creating socket s, how do I actually find the port it is listening on? sockaddr_in addr; int len = sizeof(addr); getpeername(s, (sockaddr*)&addr, &len); cout << string(inet_ntoa(addr.sin_addr)) << ":" << ntohs(addr.si...

Testing for writability of BSD socket in Cocoa.

I have a BSD socket created with following code (it's in external library that I cannot change): fcntl(sock, F_SETFL, O_NONBLOCK); connect(sock, (struct sockaddr*) &sin, sizeof(sin)) What I can do to get a notification from Cocoa that connection is established? In regular world I would make select(3) and test for writability but this ...

Sockets in MinGW

I was just trying to build netcat in MSYS using MinGW and realized that MinGW never really ported all of the BSD socket stuff to Windows (eg sys/socket.h). I know you can use Windows Sockets in MinGW, but why did they never make a Windows port of the BSD sockets? I noticed quite a few programs using #ifdef's to workaround the issue. I...

how to determine value for ipv6mr_interface field of ipv6_mreq structure

I am trying to create a BSD socket to listen for messages from a specific IPv6 multicast address. I currently have no problem creating the socket listening on the correct address 0::0. The problem is that I am running on a small embedded linux server with multiple NICs; here the ipv6mr_interface field of the ipv6_mreq is important. By...

How to support both IPv4 and IPv6 connections

Hello, I'm currently working on a UDP socket application and I need to build in support so that IPV4 and IPV6 connections can send packets to a server. I was hoping that someone could help me out and point me in the right direction; the majority of the documentation that I found was not complete. It'd also be helpful if you could poin...

Why would a blocking socket repeatedly return 0-length data?

I'm having a significant problem using a standard BSD-style socket in a C++ program. In the code below, I connect to a local web server, send a request, and simply create a loop waiting for data to return. I actually do receive the data, but then I get an endless stream of 0-length data as if it was a non-blocking socket. The web server ...

Non-blocking socket on Windows doesn't return after send() call

I'm hoping someone can explain a situation -- any situation -- in which a non-blocking Windows socket would not immediately return after using send() on it. On other platforms, my code works as intended, so it appears to be a Windows-specific issue. The way I can tell it isn't returning is quite simple: I cout a message immediately befo...

How to get the address of the DNS server that getaddrinfo queries

Hello all, I'm newbie to BSD socket programming in C. I can query a web address to get its associated ip addresses with "getaddrinfo" function. But i want to know which dns server getaddrinfo queries this information from. ...

How to tunnel TCP over reliable UDP?

Assume I have a reliable UDP library, and want to tunnel arbitrary TCP connections over it. This is my current approach to doing so, but I feel that it may not be very efficient. Any suggestions are very welcome. Client establishes a reliable UDP connection to server. Client runs a local SOCKS5 proxy, which receives data from any app t...

What is the difference between POSIX sockets and BSD sockets?

Could someone please explain the differences between POSIX sockets and BSD sockets? ...

when is IPPROTO_UDP required?

When is IPPROTO_UDP required? Is there ever a case where UDP is not the default protocol for SOCK_DGRAM? (real cases, not hypothetical "it might be", please") i.e., what are the situations where the following two lines would not produce identical behavior? if ((s=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP))==-1) if ((s=socket(AF_INET, SO...

Odd socket() error -- returns -1, but errno=ERROR_SUCCESS

I'm developing a dedicated game server on a linux machine, in C/C++ (mixed). I have the following snippet of code: int sockfd=socket(AI_INET, SOCK_DGRAM, 0); if(sockfd==-1) { int err=errno; fprintf(stderr,"%s",strerror(err)); exit(1); } My problem here, is that socket is returning -1 (implying a failure) and the error stri...

Can't create socket on Windows

I have quite an embarrassing problem. The following code simply will not create a socket on Windows; it fails and displays the error message. Could anyone briefly explain why this might be? I'm incredibly confused and frustrated that something so simple is failing. Thank you. int sock; if( (sock = socket(AF_INET, SOCK_STREAM, 0)) < 0 ) ...

Are BSD/Posix sockets reentrant?

Can several threads operate on the same socket descriptor, i.e accept(sock_fd) at the same time without concern? The platform I'm mostly interested in is POSIX/Linux. ...

Double UDP socket binding in Linux

In C++, when I run (red alert! pseudo-code) bind(s1, <local address:port1234>) bind(s2, <local address:port1234>) on two different UDP sockets (s1 and s2 each created with a call to socket()) I get problems. In Linux (Ubuntu), the double binding seems to be fine. In Windows, however, the double binding fails, and the call to bind() th...

Is it possible for me to accept a connection and have it die withouit my knowing, then accept antoher connection on the same socket number?

Is it possible for me to accept a connection and have it die withouit my knowing, then accept another connection on the same socket number? I've got a thread to do protocol parsing and response creation. I've got another thread to handle all my network IO and one more thread to handle new incomcing connection requests. That makes three ...

-[NSCFData writeStreamHandleEvent:]: unrecognized selector sent to instance in a stream callback

Hi everyone, I am working with streams and sockets in iPhone SDK 3.1.3 the issue is when the program accept a callback and I want to handle this writestream callback the following error is triggered " Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: ' -[NSCFData writeStreamHandleEvent:]: unrecognized sele...

Socket Programming UDP GetSocketOpt.

A third Party library gives us just the created socket on which listen data. Now this socket can be udp or tcp, I am not able to figure out which options to give to getsockopt to figure out whether the socket is udp or tcp. SOL_SOCKET, SO_BROADCAST doesn't seem to serve this purpose. ...