% Remember to use the lgrind style \File{socks.cc},{12:51},{Oct 24 1996} \L{\LB{\K{\#include}_\<\V{stdio}.\V{h}\>}} \L{\LB{\K{\#include}_\<\V{stdlib}.\V{h}\>}} \L{\LB{\K{\#include}_\<\V{unistd}.\V{h}\>}} \L{\LB{\K{\#include}_\<\V{string}.\V{h}\>}} \L{\LB{\K{\#include}_\<\V{sys}\1\V{types}.\V{h}\>}} \L{\LB{\K{\#include}_\<\V{netinet}\1\V{in}.\V{h}\>}} \L{\LB{\K{\#include}_\<\V{sys}\1\V{socket}.\V{h}\>}} \L{\LB{\K{\#include}_\<\V{arpa}\1\V{inet}.\V{h}\>}} \L{\LB{\K{\#include}_\<\V{iostream}.\V{h}\>}} \L{\LB{}} \L{\LB{\K{\#define}_\V{ERROR}_\-1}\Tab{40}{\1\1_\V{Signifies}_\V{an}_\V{error}_\V{has}_\V{occured}}} \L{\LB{\K{\#define}_\V{COMM\_DOMAIN}_\V{AF\_INET}_____________\1\1_\V{Sets}_\V{up}_\V{the}_\V{communication}_\V{domain}}} \L{\LB{\K{\#define}_\V{PORT\_NUMBER}_11611294____________\1\1_\V{Sets}_\V{up}_\V{the}_\V{port}_\V{number}_\V{to}_\V{be}_\V{used}}} \L{\LB{\K{\#define}_\V{IP\_ADDRESS}_\S{}\"130.194.166.9\"\SE{}______\1\1_\V{Machine}_\V{to}_\V{bind}_\V{to}_(\V{ie}._\V{ant}.\V{sd})}} \L{\LB{\K{\#define}_\V{PROTOCOL}_0______________________\1\1_\V{Use}_\V{the}_\K{default}_\V{Protocol}}} \L{\LB{\K{\#define}_\V{NUMBER\_OF\_CONNECTIONS}_25________\1\1_\V{Maximum}_\V{number}_\V{of}_\V{concurrent}}} \L{\LB{}\Tab{40}{\1\1__\V{connections}}} \L{\LB{}} \L{\LB{}} \L{\LB{\K{struct}_\V{packet}___________________________\1\1_\V{Data}_\V{structure}_\V{which}_\V{is}}} \L{\LB{________________________________________\1\1__\V{transmitted}_\V{between}_\V{the}_\V{server}}} \L{\LB{________________________________________\1\1__\V{and}_\V{client}}} \L{\LB{\{}} \L{\LB{_\K{short}_\V{returnShort};_____________________\1\1_\V{Equivalent}_\V{to}_\V{CORBA}::\V{Short}}} \L{\LB{_\K{long}_\V{returnLong};_______________________\1\1_\V{Equivalent}_\V{to}_\V{CORBA}::\V{Long}}} \L{\LB{_\K{unsigned}_\K{short}_\V{returnUnsignedShort};____\1\1_\V{Equivalent}_\V{to}_\V{CORBA}::\V{UShort}}} \L{\LB{_\K{unsigned}_\K{long}_\V{returnUnsignedLong};______\1\1_\V{Equivalent}_\V{to}_\V{CORBA}::\V{ULong}}} \L{\LB{_\K{float}_\V{returnFloat};_____________________\1\1_\V{Equivalent}_\V{to}_\V{CORBA}::\V{Float}}} \L{\LB{_\K{double}_\V{returnDouble};___________________\1\1_\V{Equivalent}_\V{to}_\V{CORBA}::\V{Double}}} \L{\LB{_\K{char}_\V{returnCharacter};__________________\1\1_\V{Equivalent}_\V{to}_\V{CORBA}::\V{Char}}} \L{\LB{_\K{char}_\V{returnBoolean};____________________\1\1_\V{Equivalent}_\V{to}_\V{CORBA}::\V{Boolean}}} \L{\LB{_\K{char}_\V{returnString}[70];_________________\1\1_\V{Equivalent}_\V{to}_\V{CORBA}::\V{String}}} \L{\LB{_\K{float}_\V{bFloat};}\Tab{40}{\1\1_\V{Equivalent}_\V{to}_\V{CORBA}::\V{Float}}} \L{\LB{_\K{double}_\V{bDouble};}\Tab{40}{\1\1_\V{Equivalent}_\V{to}_\V{CORBA}::\V{Double}}} \L{\LB{_\K{short}_\V{bShort};}\Tab{40}{\1\1_\V{Equivalent}_\V{to}_\V{CORBA}::\V{Short}}} \L{\LB{_\K{long}_\V{bLong};}\Tab{40}{\1\1_\V{Equivalent}_\V{to}_\V{CORBA}::\V{bLong}}} \L{\LB{\};}} \L{\LB{}} \L{\LB{\Proc{main}\V{main}()}} \L{\LB{\{}} \L{\LB{_\K{int}_\V{serverId},\V{clientId},\V{clientLen}=0;}\Tab{40}{\1\1_\V{Declare}_\V{the}_\V{file}_\V{descriptor}}} \L{\LB{}\Tab{40}{\1\1__\V{handlers}_\K{for}_\V{the}_\V{server}}} \L{\LB{}\Tab{40}{\1\1__\V{connection}_\V{and}_\V{client}}} \L{\LB{}\Tab{40}{\1\1__\V{connection}}} \L{\LB{}} \L{\LB{_\K{int}_\V{nread}=0;}\Tab{40}{\1\1_\V{Declare}_\V{a}_\V{variable}_\V{which}_\V{is}_\V{used}}} \L{\LB{}\Tab{40}{\1\1__\V{to}_\V{record}_\V{how}_\V{many}_\V{bytes}_\V{were}}} \L{\LB{}\Tab{40}{\1\1__\V{sent}_\V{and}_\V{how}_\V{many}_\V{are}_\V{received}}} \L{\LB{}} \L{\LB{_\K{struct}_\V{packet}_\V{aPacket};}\Tab{40}{\1\1_\V{Declare}_\V{the}_\V{data}_\V{structure}_\K{for}}} \L{\LB{}\Tab{32}{__}\Tab{40}{\1\1__\V{transmission}}} \L{\LB{}} \L{\LB{_\K{struct}_\V{sockaddr\_in}_\V{server};}\Tab{40}{\1\1_\V{Declare}_\V{a}_\V{socket}_\V{structure}_\K{for}}} \L{\LB{}\Tab{40}{\1\1__\V{the}_\V{server}}} \L{\LB{}} \L{\LB{_\K{struct}_\V{sockaddr\_in}_\V{client};}\Tab{40}{\1\1_\V{Declare}_\V{a}_\V{socket}_\V{structure}_\K{for}}} \L{\LB{}\Tab{40}{\1\1__\V{the}_\V{client}}} \L{\LB{}} \L{\LB{_\V{server}.\V{sin\_family}_=_\V{COMM\_DOMAIN};_______\1\1_\V{Inform}_\V{the}_\V{socket}_\V{structure}_\V{of}}} \L{\LB{}\Tab{40}{\1\1__\V{the}_\V{communication}_\V{domain}}} \L{\LB{}} \L{\LB{_\V{server}.\V{sin\_port}_=_\V{htons}(\V{PORT\_NUMBER});__\1\1_\V{Inform}_\V{the}_\V{socket}_\V{structure}_\V{of}}} \L{\LB{}\Tab{40}{\1\1__\V{the}_\V{port}_\V{number}_\V{to}_\V{be}_\V{used}_}} \L{\LB{}\Tab{40}{\1\1__\V{expressed}_\V{in}_\V{network}_\V{byte}_\V{order}}} \L{\LB{}} \L{\LB{_\V{server}.\V{sin\_addr}.\V{s\_addr}_=_\V{inet\_addr}_(\V{IP\_ADDRESS});_\1\1_\V{Set}_\V{the}_\V{IP}_\V{address}}} \L{\LB{}} \L{\LB{}\Tab{40}{\1\1_\V{Try}_\V{to}_\V{build}_\V{a}_\V{socket}}} \L{\LB{_\V{serverId}_=_\V{socket}(\V{COMM\_DOMAIN},\V{SOCK\_STREAM},\V{PROTOCOL});}} \L{\LB{_\K{if}_(\V{serverId}_==_\V{ERROR})}} \L{\LB{__\V{exit}(1);}\Tab{40}{\1\1_\V{Error}_\V{on}_\V{building}_\V{the}_\V{socket}}} \L{\LB{}} \L{\LB{}\Tab{40}{\1\1_\V{Try}_\V{and}_\V{bind}_\V{the}_\V{socket}_\V{to}_\V{the}}} \L{\LB{}\Tab{40}{\1\1__\V{system}}} \L{\LB{_\K{if}_(\V{bind}(\V{serverId},(\V{sockaddr}\*)_\&\V{server},\K{sizeof}(\V{server}))_==_\V{ERROR})}} \L{\LB{__\V{exit}(1);}} \L{\LB{}} \L{\LB{}\Tab{40}{\1\1_\V{Start}_\V{to}_\V{listen}_\K{for}_\V{connections}}} \L{\LB{_\K{if}_(\V{listen}(\V{serverId},\V{NUMBER\_OF\_CONNECTIONS})_==_\V{ERROR})}} \L{\LB{__\V{exit}(1);}} \L{\LB{}} \L{\LB{}\Tab{40}{\1\1_\V{Accept}_\V{connection}}} \L{\LB{_\V{clientId}_=_\V{accept}(\V{serverId},(\V{sockaddr}\*)_\&\V{server},\&\V{clientLen});}} \L{\LB{_\K{if}_(\V{clientId}_==_\V{ERROR})}} \L{\LB{__\V{exit}(1);}} \L{\LB{}} \L{\LB{_\K{for}_(\K{int}_\V{counter}=0;\V{counter}\<10000;\V{counter}++)}} \L{\LB{}\Tab{40}{\1\1_\V{Looping}_\V{construct}_\K{for}_10,000_\V{times}}} \L{\LB{_\{}} \L{\LB{__\V{nread}=\V{read}(\V{clientId},\&\V{aPacket},\K{sizeof}(\K{struct}_\V{packet}));_\1\1_\V{Read}_\V{the}_\V{data}_\V{in}}} \L{\LB{__\V{nread}=\V{write}(\V{clientId},\&\V{aPacket},\K{sizeof}(\K{struct}_\V{packet}));_\1\1_\V{Write}_\V{the}_\V{data}_\V{out}}} \L{\LB{_\}}} \L{\LB{_\V{shutdown}(\V{serverId},2);}\Tab{40}{\1\1_\V{Do}_\V{a}_\V{full}_\V{shutdown}_\V{of}_\V{the}_\V{socket}}} \L{\LB{}\Tab{40}{\1\1_\V{upon}_\V{completion}}} \L{\LB{\}}} \L{\LB{}}