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); } --------------------------------------------------------------------------------