Question about socketpair

Does anyone know of any way to write to a socket and block until the data has been read at the other end?

Apparently, the socket has some sort of receiving/sending buffer (SO_RCVBUF/SO_SNDBUF options), I was thinking maybe we can change the value to block write(). So I tried setting the buffer size to 1 byte, and for some reason it doesn’t work: setsockopt() returned correctly, but write() function was not blocked anyway. I also tried buffer size 16 and 64 byte, they didn’t work either.

Any idea?

Thanks.

//*************** Code ***************************
int size = 1;
if (setsockopt(fda[0], SOL_SOCKET, SO_RCVBUF, &size, sizeof(int)) < 0){
cout << “something is wrong” << endl;
}

if (setsockopt(fda[1], SOL_SOCKET, SO_SNDBUF, &size, sizeof(int)) < 0){
    cout << "something is wrong" << endl;
}

Zhenwang,

You didn’t mention whether you were using UDP or TCP sockets. Not that it matters much either way.

With sockets there is no way to know when the data has been read at the other end unless the remote application sends back an acknowledgement packet to your application.

In other words, your apps have to do all of that work (or you can use QNET if both sides are running QNX).

Tim

Thanks.

I was actually trying to use it as a local socket stream, as

socketpair(AF_LOCAL, SOCK_STREAM, 0, fda) ;

Did trust my answer on community.qnx.com, lol !