Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<string.h> //strlen
- #include<sys/socket.h>
- #include<arpa/inet.h> //inet_addr
- #include<unistd.h> //write
- #include<stddef.h>
- int main(int argc, char *argv[])
- {
- int socket_desc, new_sd, c, sd;
- struct sockaddr_in server, client;
- char *message;
- //Create socket
- socket_desc = socket(AF_INET, SOCK_STREAM, 0);
- if (socket_desc == -1)
- {
- puts("Could not create fsocket");
- }
- //Prepare the sockaddr_in structure
- server.sin_family = AF_INET;
- server.sin_addr.s_addr = INADDR_ANY;
- server.sin_port = htons(8888);
- //Bind
- if (bind(socket_desc, (struct sockaddr *)&server, sizeof(server)) < 0)
- {
- puts("bind failed");
- return 1;
- }
- puts("bind done");
- //Listen
- listen(socket_desc, 3);
- //Accept and incoming connection
- puts("Waiting for incoming connections...");
- c = sizeof(struct sockaddr_in);
- const int RECV_BUF_SIZE = 512;
- char recv_buf[RECV_BUF_SIZE];
- int n, nwrote;
- while (1)
- {
- new_sd = accept(socket_desc, (struct sockaddr *)&client, (socklen_t*)&c);
- if (new_sd >= 0) {
- puts("Connection accepted\r\n");
- int i = 0;
- int fnd = 0;
- int tread = 0;
- do {
- // read a max possible bytes from buffer
- if ((n = read(new_sd, &recv_buf[tread], RECV_BUF_SIZE - tread)) < 0) {
- puts("error reading from socket, closing socket\r\n");
- break;
- }
- if (n > 0)
- {
- printf("%d rcvd\r\n", n);
- tread += n;
- if (tread >= RECV_BUF_SIZE) {
- // should never happen
- fnd = 2;
- break;
- }
- }
- // break after end of the message
- for (i = 0; i < tread; i++) {
- // test for terminatign character
- if (recv_buf[i] == 0)
- {
- puts("0 found\r\n");
- fnd = 1;
- }
- }
- } while (!fnd);
- if (fnd > 1) {
- printf("an error occured\r\n");
- close(new_sd);
- break;
- }
- // should use total write here as well
- int twrote = 0;
- int sent = 0;
- do {
- n = write(new_sd, &recv_buf[twrote], tread - twrote);
- // handle request reply to vlient
- if (n < 0) {
- puts("ERROR responding to client echo request\r\n");
- puts("Closing socket\r\n");
- close(new_sd);
- break;
- }
- if (n > 0) {
- twrote += n;
- if (twrote == tread) {
- sent = 1;
- }
- }
- } while (!sent);
- printf("OK sent %d\r\n", twrote);
- close(new_sd);
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement