Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* basic socket operations, UNIX-native */
- /* pointer arithmetics:
- *
- * push(pointer, v) INDICATES *(pointer++) = v
- * pop(pointer) INDICATES *(--pointer)
- * (*++v)[0] INDICATES (**++v)
- * INDICATES first char in v
- * INDICATES name of string/vector v
- * likewise, *v[0] INDICATES **v
- * and *v[n] INDICATES **(v + n)
- * returntype (*funct)(args) INDICATES a function funct with arguments args which returns...
- * char **argv INDICATES pointer to char pointer
- * int(*v)[len] INDICATES pointer "v" to a vector of "len" int elements
- * int *v[len] INDICATES vector "v" of "len" pointers to int elements
- * void *funct() INDICATES function "funct" that returns a pointer-to-void
- * void (*funct)() INDICATES pointer to a function "funct" that returns void
- *
- */
- /* useful characters: [] # */
- # include <stdio.h>
- # include <stdlib.h> // for exit
- # include <sys/types.h>
- # include <sys/socket.h>
- # include <netinet/in.h>
- # include <netdb.h>
- # include <fcntl.h> // for O_RDWR
- # define BUFFER 256
- # define exception(x) { puts(x); exit(1); }
- # define h_addr h_addr_list[0]
- struct socket_in {
- short family; // domain, e.g. AF_INET
- unsigned short port;
- struct in_addr addr; // IP number
- char zero[8]; // unused bytes
- };
- int main(int argc, char * argv[])
- {
- /* creation of a TCP socket */
- int sock;
- struct socket_in mysock;
- sock = socket(AF_INET, SOCK_STREAM, 0); // Internet, TCP, type 0 (default)
- mysock.family = AF_INET;
- mysock.port = 1999;
- mysock.addr.s_addr = INADDR_ANY; // can receive data from any address or socket
- /* binding */
- /* SOCK and MYSOCK will be used without being reinstanced */
- char c;
- bind(sock, &mysock, sizeof(mysock)); // binds sock and mysock
- if(fork() != 0) close(sock); // in parent process: closes socket
- else // in child process: uses socket
- {
- while(read(0, &c, 1) == -1); // waits until there is no more data to read
- close(sock);
- }
- /* accept */
- /* SOCK will be used without being reinstanced */
- int sock_acc;
- struct sockaddr address;
- int addrlen;
- sock_acc = accept(sock, &address, &addrlen); // accepts communication from sock
- close(sock);
- close(sock_acc);
- /* connect */
- /* SOCK and MYSOCK will be used without being reinstanced */
- int length, success;
- struct hostent * hp; // used in gethostbyname() to save the return value
- hp = gethostbyname("conde.dis.uniroma1.it");
- memcpy(&mysock.addr, hp->h_addr, 4); // copying from address to hp.address ???
- success = connect(sock, &mysock, sizeof(mysock)); // attempts connection
- if(success == -1) exception("Connection error\n");
- close(sock);
- return 0;
- }
- // the program segfaults, why?
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement