Skip to content

Instantly share code, notes, and snippets.

@aleksandergurin
Last active August 29, 2015 14:22
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save aleksandergurin/804ce510c9247db930c1 to your computer and use it in GitHub Desktop.
Save aleksandergurin/804ce510c9247db930c1 to your computer and use it in GitHub Desktop.
Simple echo client for linux
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <stdio.h>
int main(int argc, char *argv[]) {
const char *SERVER_IP = "127.0.0.1";
int fd = socket(AF_INET, SOCK_STREAM, 0);
if (fd == -1) {
fprintf(stderr, "Error on socket creation.\n");
return 1;
}
struct sockaddr_in server_addr;
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(8080);
if (inet_pton(AF_INET, SERVER_IP, &(server_addr.sin_addr)) == -1) {
fprintf(stderr, "Invalid server IP address.\n");
return 1;
}
struct timeval tv;
tv.tv_sec = 30; // 30 seconds timeout for send, revc
tv.tv_usec = 0;
if (setsockopt(fd, SOL_SOCKET, SO_RCVTIMEO,
(char *) &tv, sizeof(struct timeval)) == -1) {
fprintf(stderr, "Error on setting socket receive timeout.\n");
return 1;
}
if (setsockopt(fd, SOL_SOCKET, SO_SNDTIMEO,
(char *) &tv, sizeof(struct timeval)) == -1) {
fprintf(stderr, "Error on setting socket send timeout.\n");
return 1;
}
if (connect(fd, (struct sockaddr *) &server_addr,
sizeof(server_addr)) == -1) {
fprintf(stderr, "Couldn't connect to server.\n");
return 1;
}
char message[] = "Test message\n";
int data_len = sizeof(message);
void *buf_pt = message;
int slen;
// Send message
while ((slen = send(fd, buf_pt, data_len, 0)) != 0) {
if (slen == -1) {
fprintf(stderr, "Error on sending data.\n");
close(fd);
return 1;
}
data_len -= slen;
buf_pt += slen;
}
// Receive message
const int BUF_LEN = 2048;
char buf[BUF_LEN];
int rlen;
int recv_data_len = 0;
while (recv_data_len < sizeof(message)
&& (rlen = recv(fd, buf, BUF_LEN, 0)) != 0) {
if (rlen == -1) {
fprintf(stderr, "Error on receiving data.\n");
close(fd);
return 1;
}
fwrite(buf, 1, rlen, stdout);
recv_data_len += rlen;
}
close(fd);
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment