/* 
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