[comp.unix.questions] sockets: recvfrom call

tony@artecon.UUCP (04/30/87)

According to my manuals, the recvfrom call does not require the
socket to be connected.  However, I am getting an immediate
return with the error: Socket not connected.  Any ideas?

This is what the code fragment looks like:

#include <sys/types.h>
#include <sys/socket.h>

#define SOCKNAME "mysocket"

main()   /* server */
{
int s,ns; /* socket descriptors */
static struct sockaddr name = {AF_UNIX,SOCKNAME};
static struct sockaddr nname;
int nnamelen;
int imsg;

if ((s=socket(AF_UNIX,SOCK_STREAM,0)) < 0){
	perror("cant open socket");
	exit(-1);
	}

if(bind(s,&name,sizeof(name)) < 0){
	perror("cant bind to socket");
	exit(-2);
	}

nnamelen = sizeof(nname);
if(recvfrom(s,&imsg,sizeof(imsg),0,&nname,&nnamelen) < 0){
	perror("server recvfrom error");
	exit(-5);
	}

/* this is where it fails */
-- 
**************** Insert 'Standard' Disclaimer here:  OOP ACK! *****************
*  Tony Parkhurst -- {hplabs|sdcsvax|ncr-sd|hpfcla|ihnp4}!hp-sdd!artecon!adp  *
*                -OR-      hp-sdd!artecon!adp@nosc.ARPA                       *
*******************************************************************************

lm@cottage.WISC.EDU (Larry McVoy) (05/01/87)

*) tony@artecon.artecon.UUCP (Anthony D. Parkhurst) writes:
*) According to my manuals, the recvfrom call does not require the
*) socket to be connected.  However, I am getting an immediate
*) return with the error: Socket not connected.  Any ideas?
*) ....
*) static struct sockaddr name = {AF_UNIX,SOCKNAME};
*) ....
*) if(recvfrom(s,&imsg,sizeof(imsg),0,&nname,&nnamelen) < 0){

Methinks that you must connect stream sockets.  You can do what you're trying 
to do here with UDP (datagram) sockets, but not stream sockets.   Mail me
for examples of UDP & TCP socket code if you like.
Larry McVoy 	        mcvoy@rsch.wisc.edu  or  uwvax!mcvoy

"What a wonderful world it is that has girls in it!"