/*
Program: minser.c
Author: Dr Beco, 2011-04-03
Objective:
show a minimum server program that can
create a socket, accept a client, read a byte, write a byte, disconnect
*/
#include <stdio.h>
#include <unistd.h>
#include <netinet/in.h>
#include <sys/un.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#define BUFFER 200
int main( void )
{
int port = 8234 ;
char data[ BUFFER] ;
struct sockaddr_in dir;
struct sockaddr client;
socklen_t long_client;
int id, idReuse= 1 , son, aux;
dir.sin_port = port;
dir.sin_family = AF_INET;
//dir.sin_addr.s_addr = INADDR_ANY;
dir.sin_addr .s_addr = inet_addr( "192.168.0.201" ) ;
id = socket( AF_INET, SOCK_STREAM, 0 ) ;
if ( id == - 1 ) {
return - 1 ;
}
if ( setsockopt( id, SOL_SOCKET, SO_REUSEADDR,& idReuse, sizeof ( idReuse) ) == - 1 ) {
return - 1 ;
}
if ( bind( id, ( struct sockaddr * ) & dir, sizeof ( dir) ) == - 1 )
{
close ( id) ;
return - 1 ;
}
if ( listen( id , 1 ) == - 1 )
{
printf ( "Failed to listen on the socket\n " ) ; close( id) ;
return - 1 ;
}
long_client = sizeof ( client) ;
son = accept( id, & client, & long_client) ;
aux = read( son, data , 1 ) ;
//aux = send(son, "S", 1, MSG_NOSIGNAL);
aux = send( son, "S" , 1 , SO_NOSIGPIPE) ; // for macOS
return 0 ;
}
LyoKUHJvZ3JhbTogbWluc2VyLmMKQXV0aG9yOiBEciBCZWNvLCAyMDExLTA0LTAzCk9iamVjdGl2ZToKICAgIHNob3cgYSBtaW5pbXVtIHNlcnZlciBwcm9ncmFtIHRoYXQgY2FuCiAgICBjcmVhdGUgYSBzb2NrZXQsIGFjY2VwdCBhIGNsaWVudCwgcmVhZCBhIGJ5dGUsIHdyaXRlIGEgYnl0ZSwgZGlzY29ubmVjdAoqLwoKI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDx1bmlzdGQuaD4KI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KI2luY2x1ZGUgPHN5cy91bi5oPgojaW5jbHVkZSA8c3RyaW5nLmg+CiNpbmNsdWRlIDx1bmlzdGQuaD4KI2luY2x1ZGUgPGFycGEvaW5ldC5oPgoKI2RlZmluZSBCVUZGRVIgMjAwCgppbnQgbWFpbih2b2lkKQp7CiAgICBpbnQgcG9ydCA9IDgyMzQ7CiAgICBjaGFyIGRhdGFbQlVGRkVSXTsKICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBkaXI7CiAgICBzdHJ1Y3Qgc29ja2FkZHIgY2xpZW50OwogICAgc29ja2xlbl90IGxvbmdfY2xpZW50OwogICAgaW50IGlkLCBpZFJldXNlPTEsIHNvbiwgYXV4OwoKICAgIG1lbXNldCgmZGlyLDAsc2l6ZW9mKGRpcikpOwogICAgZGlyLnNpbl9wb3J0ID0gcG9ydDsKICAgIGRpci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKICAgIC8vZGlyLnNpbl9hZGRyLnNfYWRkciA9IElOQUREUl9BTlk7CiAgICBkaXIuc2luX2FkZHIuc19hZGRyID0gaW5ldF9hZGRyKCIxOTIuMTY4LjAuMjAxIik7CgogICAgaWQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIDApOwogICAgaWYgKGlkID09IC0xKSB7CiAgICAgICAgcmV0dXJuIC0xOwoJfQogICAgCiAgICBpZihzZXRzb2Nrb3B0KGlkLFNPTF9TT0NLRVQsU09fUkVVU0VBRERSLCZpZFJldXNlLHNpemVvZihpZFJldXNlKSkgPT0gLTEpIHsKICAgICAgIHJldHVybiAtMTsKCX0KICAgIAogICAgaWYoYmluZChpZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZkaXIsIHNpemVvZihkaXIpKSA9PSAtMSkKICAgIHsKICAgICAgICBjbG9zZSAoaWQpOwogICAgICAgIHJldHVybiAtMTsKICAgIH0KICAgIAogICAgaWYgKGxpc3RlbihpZCAsIDEpID09IC0xKQogICAgewoJCXByaW50ZigiRmFpbGVkIHRvIGxpc3RlbiBvbiB0aGUgc29ja2V0XG4iKTsKICAgICAgICBjbG9zZShpZCk7CiAgICAgICAgcmV0dXJuIC0xOwogICAgfQogICAgCiAgICBsb25nX2NsaWVudCA9IHNpemVvZiAoY2xpZW50KTsKICAgIHNvbiA9IGFjY2VwdChpZCwgJmNsaWVudCwgJmxvbmdfY2xpZW50KTsKICAgIGF1eCA9IHJlYWQoc29uLCBkYXRhICwgMSk7CgkvL2F1eCA9IHNlbmQoc29uLCAiUyIsIDEsIE1TR19OT1NJR05BTCk7CiAgICBhdXggPSBzZW5kKHNvbiwgIlMiLCAxLCBTT19OT1NJR1BJUEUpOyAvLyBmb3IgbWFjT1MKICAgIHByaW50ZigiZG9uZSFcbiIpOwoKICAgIHJldHVybiAwOwp9Cg==
compilation info
prog.c: In function ‘main’:
prog.c:59:29: error: ‘SO_NOSIGPIPE’ undeclared (first use in this function); did you mean ‘SO_OOBINLINE’?
aux = send(son, "S", 1, SO_NOSIGPIPE);
^~~~~~~~~~~~
SO_OOBINLINE
prog.c:59:29: note: each undeclared identifier is reported only once for each function it appears in
prog.c:26:29: warning: variable ‘aux’ set but not used [-Wunused-but-set-variable]
int id, idReuse=1, son, aux;
^~~
stdout