*BSD News Article 81630


Return to BSD News archive

Path: euryale.cc.adfa.oz.au!newshost.carno.net.au!harbinger.cc.monash.edu.au!news.rmit.EDU.AU!news.unimelb.EDU.AU!cs.mu.OZ.AU!munnari.OZ.AU!news.Hawaii.Edu!news.uoregon.edu!hammer.uoregon.edu!arclight.uoregon.edu!feed1.news.erols.com!howland.erols.net!newsfeed.internetmci.com!demos!news.uni-stuttgart.de!news.ruhr-uni-bochum.de!news.rhrz.uni-bonn.de!usenet
From: gorski@cips01.physik.uni-bonn.de
Newsgroups: comp.unix.bsd.freebsd.misc
Subject: How to open a socket under FreeBSD?
Date: 26 Oct 1996 15:27:02 GMT
Organization: ;-)
Lines: 66
Distribution: world
Message-ID: <GORSKI.96Oct26172702@axiom.www.xxx>
NNTP-Posting-Host: rhrz-ts3-p3.rhrz.uni-bonn.de



I want to open a socket under FreeBSD, but all the examples I've found for BSD
use the 'struct sockaddr_in'. FreeBSD needs 'struct sockaddr'! I'm not familiar
with sockets. How can I open a socket under FreeBSD?
I've seen something like  connect(sock, (struct sockaddr *) &name, sizeof(name))
in some source codes. Is that the way? This seems to be wrong for me.

Thanks for help (links to resources,dox,books,etc. are welcome).




None working example (from PSD:20):
--------------------------------------------------------------------------------
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdio.h>

/*
 * In the included file <netinet/in.h> a sockaddr_in is defined as follows:
 * struct sockaddr_in {
 *   short     sin_family;
 *   u_short   sin_port;
 *   struct in_addr sin_addr;
 *   char sin_zero[8];
 * };
 *
 * This program creates a datagram socket, binds a name to it, then reads
 * from the socket.
 */
main()
{
     int sock, length;
     struct sockaddr_in name;
     char buf[1024];

     /* Create socket from which to read. */
     sock = socket(AF_INET, SOCK_DGRAM, 0);
     if (sock < 0) {
          perror("opening datagram socket");
          exit(1);
     }
     /* Create name with wildcards. */
     name.sin_family = AF_INET;
     name.sin_addr.s_addr = INADDR_ANY;
     name.sin_port = 0;
     if (bind(sock, &name, sizeof(name))) {
          perror("binding datagram socket");
          exit(1);
     }
     /* Find assigned port value and print it out. */
     length = sizeof(name);
     if (getsockname(sock, &name, &length)) {
          perror("getting socket name");
          exit(1);
     }
     printf("Socket has port #%d\n", ntohs(name.sin_port));
     /* Read from the socket */
     if (read(sock, buf, 1024) < 0)
          perror("receiving datagram packet");
     printf("-->%s\n", buf);
     close(sock);
}
--------------------------------------------------------------------------------