1. Linux Debugging questions and answers focuses on Internet Domain Socket System Calls.1. What is the output of this program?
-
#include -
#include<sys/types.h> -
#include<sys/socket.h> -
int main()
-
{ -
struct sockaddr_in addr;
-
int fd;
-
fd = socket(AF_INET,SOCK_STREAM,0);
-
printf("%dn",fd);
-
return 0;
-
}
a) -1
b) 3
c) error
d) none of the mentioned
Answer: c
Clarification: The header file netinet/in.h is required to use the structure sockaddr_in.
Output:
[[email protected] ]# gcc -o san san.c
san.c: In function ‘main’:
san.c:7:21: error: storage size of ‘addr’ isn’t known
[[email protected] ]#
2. What is the output of this program?
-
#include -
#include -
#include<netinet/in.h> -
#include<sys/types.h> -
#include<sys/socket.h> -
int main()
-
{ -
int fd_server, fd_client, len, len_client;
-
struct sockaddr_in add_server, add_client;
-
char buff[10];
-
fd_server = socket(AF_INET,SOCK_STREAM,0);
-
if (fd_server == -1)
-
{ -
perror("fd_sock");
-
exit(1);
-
} -
len = sizeof(add_server);
-
len_client = sizeof(add_client);
-
if( bind(fd_server,(struct sockaddr*)&add_server,len) != 0)
-
perror("bind");
-
fd_client = accept(fd_server,(struct sockaddr*)&add_client,len_client);
-
if(fd_client == -1)
-
perror("accept");
-
read(fd_client,buff,10);
-
return 0;
-
}
a) segmentation fault
b) error at the time of compilation
c) syntax error
d) none of the mentioned
Answer: b
Clarification: The third argument of the accept is the type of pointer.
Output:
[[email protected] ]# gcc -o san san.c
san.c: In function ‘main’:
san.c:26:39: warning: passing argument 3 of ‘accept’ makes pointer from integer without a cast [enabled by default]
/usr/include/sys/socket.h:214:12: note: expected ‘socklen_t * __restrict__’ but argument is of type ‘int’
[[email protected] ]#
3. This program can send the request to
-
#include -
#include<netinet/in.h> -
#include<sys/types.h> -
#include<sys/socket.h> -
int main()
-
{ -
int fd_client,fd, len;
-
struct sockaddr_in add_server;
-
fd_client = socket(AF_INET,SOCK_STREAM,0);
-
if (fd_client == -1)
-
{ -
perror("fd_sock");
-
exit(1);
-
} -
add_server.sin_family = AF_INET;
-
add_server.sin_port = ntohs(4001);
-
add_server.sin_addr.s_addr = inet_addr("193.39.0.4");
-
len = sizeof(add_server);
-
fd = connect(fd_client,(struct sockaddr*)&add_server,len);
-
if(fd == -1)
-
perror("connect");
-
return 0;
-
}
a) the system having IP address 193.39.0.4
b) any system present in the network
c) any system of the private network
d) none of the mentioned
Answer: a
Clarification: The IP address is mentioned in the proper element of the structure sockaddr_in
4. This program is valid for
-
#include -
#include<netinet/in.h> -
#include<sys/types.h> -
#include<sys/socket.h> -
int main()
-
{ -
int fd_client,fd, len;
-
struct sockaddr_in add_server;
-
fd_client = socket(AF_INET,SOCK_STREAM,0);
-
if (fd_client == -1)
-
{ -
perror("fd_sock");
-
exit(1);
-
} -
add_server.sin_family = AF_INET;
-
add_server.sin_port = ntohs(4001);
-
add_server.sin_addr.s_addr = inet_addr("144.29.8.2");
-
len = sizeof(add_server);
-
fd = connect(fd_client,(struct sockaddr*)&add_server,len);
-
return 0;
-
}
a) IPv4
b) IPv6
c) both IPv4 and IPv6
d) none of the mentioned
Answer: a
Clarification: None.
5. What is the output of this program?
-
#include -
#include<sys/socket.h> -
int main()
-
{ -
int ret;
-
ret = shutdown(0,0);
-
printf("%dn",ret);
-
return 0;
-
}
a) 0
b) -1
c) can not be determined
d) none of the mentioned
Answer: b
Clarification: The shutdown() is used to close a socket and the first argument in shutdown() is socket.
Output:
[[email protected] ]# gcc -o san san.c
[[email protected] ]# ./san
-1
[[email protected] ]#
6. What is the problem with this server program?
-
#include -
#include -
#include<netinet/in.h> -
#include<sys/types.h> -
#include<sys/socket.h> -
int main()
-
{ -
int fd_server, fd_client, len;
-
struct sockaddr_in add_server;
-
fd_server = socket(AF_INET,SOCK_STREAM,0);
-
if (fd_server == -1)
-
{ -
perror("fd_sock");
-
exit(1);
-
} -
add_server.sin_family = AF_INET;
-
add_server.sin_port = htons(4001);
-
add_server.sin_addr.s_addr = inet_addr("122.23.1.1");
-
len = sizeof(add_server);
-
if( bind(fd_server,(struct sockaddr*)&add_server,len) != 0)
-
perror("bind");
-
if(listen(fd_server,5) != 0)
-
perror("listen");
-
fd_client = accept(fd_server,(struct sockaddr*)&add_server,&len);
-
if(fd_client == -1)
-
perror("accept");
-
return 0;
-
}
a) it can not accept the request of any client
b) it will give the segmentation fault
c) there is no problem with this program
d) none of the mentioned
Answer: a
Clarification: The address format of the client must match in the server.
7. What is the output of this program?
-
#include -
#include -
#include<netinet/in.h> -
#include<sys/types.h> -
#include<sys/socket.h> -
int main()
-
{ -
int fd_server, fd_client, len, len_client;
-
struct sockaddr_in add_server;
-
fd_server = socket(AF_INET,SOCK_STREAM,0);
-
fd_client = accept(fd_server,(struct sockaddr*)&add_server,&len);
-
if(fd_client == -1)
-
perror("accept");
-
if(listen(fd_server,5) != 0)
-
perror("listen");
-
return 0;
-
}
a) syntax error
b) error at the time of compilation
c) segmentation fault
d) none of the mentioned
Answer: d
Clarification: The listen() must always be used before accept().
Output:
[[email protected] ]# gcc -o san san.c
[[email protected] ]# ./san
accept: Invalid argument
[[email protected] ]#
8. What is the output of this program?
-
#include -
#include -
#include<netinet/in.h> -
#include<sys/types.h> -
#include<sys/socket.h> -
int main()
-
{ -
int fd_server, fd_client, len, len_client;
-
struct sockaddr_in add_server;
-
fd_server = socket(AF_INET,SOCK_STREAM,0);
-
close(fd_server);
-
perror("accept");
-
if(listen(fd_server,5) != 0)
-
perror("listen");
-
fd_client = accept(fd_server,(struct sockaddr*)&add_server,&len);
-
if(fd_client == -1)
-
return 0;
-
}
a) syntax error
b) error at the time of compilation
c) segmentation fault
d) none of the mentioned
Answer: d
Clarification: The program will not work properly because the file descriptor is not available in the for listen() and accept().
Output:
[[email protected] ]# gcc -o san san.c
[[email protected] ]# ./san
accept: Success
listen: Bad file descriptor
[[email protected] ]#
9. On which system call, this program (process) waits until the server responds?
-
#include -
#include<netinet/in.h> -
#include<sys/types.h> -
#include<sys/socket.h> -
int main()
-
{ -
int fd_client,fd, len;
-
struct sockaddr_in add_server;
-
fd_client = socket(AF_INET,SOCK_STREAM,0);
-
if (fd_client == -1){
-
perror("fd_sock");
-
exit(1);
-
} -
add_server.sin_family = AF_INET;
-
add_server.sin_port = ntohs(4001);
-
add_server.sin_addr.s_addr = inet_addr("127.0.0.1");
-
len = sizeof(add_server);
-
fd = connect(fd_client,(struct sockaddr*)&add_server,len);
-
if(fd == -1)
-
perror("connect");
-
write(fd,"Hellon",6);
-
return 0;
-
}
a) socket()
b) connect()
c) both socket() and connect()
d) none of the mentioned
Answer: a
Clarification: None.
10. What is the the response of this server for this client if both programs are running on the same system?
-
/*This is server.c*/ -
#include -
#include -
#include<netinet/in.h> -
#include<sys/types.h> -
#include<sys/socket.h> -
int main()
-
{ -
int fd_server, fd_client, len, len_client;
-
struct sockaddr_in add_server, add_client;
-
char buff[10];
-
fd_server = socket(AF_INET,SOCK_STREAM,0);
-
if (fd_server == -1)
-
{ -
perror("fd_sock");
-
exit(1);
-
} -
add_server.sin_family = AF_INET;
-
add_server.sin_port = htons(4001);
-
add_server.sin_addr.s_addr = inet_addr("127.0.0.1");
-
len = sizeof(add_server);
-
len = sizeof(add_client);
-
if( bind(fd_server,(struct sockaddr*)&add_server,len) != 0)
-
perror("bind");
-
if(listen(fd_server,5) != 0)
-
perror("listen");
-
fd_client = accept(fd_server,(struct sockaddr*)&add_client,&len_client);
-
if(fd_client == -1)
-
perror("accept");
-
read(fd_client,buff,10);
-
return 0;
-
} -
/*This is the client.c*/ -
#include -
#include<netinet/in.h> -
#include<sys/types.h> -
#include<sys/socket.h> -
int main()
-
{ -
int fd_client,fd, len;
-
struct sockaddr_in add_server;
-
fd_client = socket(AF_INET,SOCK_STREAM,0);
-
if (fd_client == -1)
-
{ -
perror("fd_sock");
-
exit(1);
-
} -
add_server.sin_family = AF_INET;
-
add_server.sin_port = ntohs(4001);
-
add_server.sin_addr.s_addr = inet_addr("127.0.0.1");
-
len = sizeof(add_server);
-
fd = connect(fd_client,(struct sockaddr*)&add_server,len);
-
if(fd == -1)
-
perror("connect");
-
write(fd,"Hellon",6);
-
return 0;
-
}
a) the server will write back to the client whatever the clinet will write to the server
b) the client server communication will not work
c) the response can not be determined
d) none of the mentioned
Answer: a
Clarification: The loopback address is used as IP address in both the programs.
