void * threadFunction(void * pointer) { psocket_plus_filename p = (psocket_plus_filename) pointer; printf("%s\n", "Thread was created"); transmitFile(p->socketHandle, p->filename); return 0; }
static void sendTrackStatus(int property_list) { if (HAS_TITLE(property_list) && mpris_data->title != NULL) { debug("sending title\n"); transmitMsg(client_socket, pathFromUrl(mpris_data->title), strlen(pathFromUrl(mpris_data->title)), TRACK_TITLE, TRACK_TITLE_SZ); } if (HAS_ARTIST(property_list) && mpris_data->artist != NULL) { debug("sending artist\n"); transmitMsg(client_socket, mpris_data->artist, strlen(mpris_data->artist), TRACK_ARTIST, TRACK_ARTIST_SZ); } if (HAS_ALBUM(property_list) && mpris_data->album != NULL) { debug("sending album\n"); transmitMsg(client_socket, mpris_data->album, strlen(mpris_data->album), TRACK_ALBUM, TRACK_ALBUM_SZ); } if (HAS_LENGTH(property_list)) { int64_t length = htobe64(mpris_data->length); debug("sending length : %ld\n", mpris_data->length); transmitMsg(client_socket, (char *)&length, sizeof(int64_t), TRACK_LENGTH, TRACK_LENGTH_SZ); } if (HAS_TRACKID(property_list) && mpris_data->trackid != NULL) { debug("sending trackid : %s\n", mpris_data->trackid); transmitMsg(client_socket, mpris_data->trackid, strlen(mpris_data->trackid), TRACK_ID, TRACK_ID_SZ); } if (HAS_ARTURL(property_list) && mpris_data->artUrl != NULL) { debug("sending arturl\n"); transmit(client_socket, TRACK_ARTURL, TRACK_ARTURL_SZ); transmitFile(client_socket, pathFromUrl(mpris_data->artUrl)); } }
int main(int argc, char *argv[]) { int sockfd, newsockfd, portno, pid; socklen_t clilen; struct sockaddr_in serv_addr, cli_addr; char buffer[BUFFER_LENGTH + 1]; if (argc < 3) { sprintf(buffer, "Usage: %s port filename", argv[0]); fail(buffer); } sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd < 0) { fail("Error while opening socket"); } bzero((char *) &serv_addr, sizeof(serv_addr)); portno = atoi(argv[1]); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = INADDR_ANY; serv_addr.sin_port = htons(portno); if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) { fail("Error while binding address to socket"); } listen(sockfd, 5); clilen = sizeof(cli_addr); while (1) { newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen); if (newsockfd < 0) { fail("Error while accepting connection"); } if (SERVER_TYPE == ST_PROCESSES) {//processes pid = fork(); if (pid < 0) { fail("Error while forking new process"); } if (pid == 0) { close(sockfd); transmitFile(newsockfd, argv[2]); exit(0); } else { close(newsockfd); } } else { //threads pthread_attr_t attr; pthread_t tid; psocket_plus_filename p_str; p_str = (psocket_plus_filename)malloc(sizeof(socket_plus_filename)); p_str->filename = argv[2]; p_str->socketHandle = newsockfd; pthread_attr_init(&attr); pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); if (pthread_create(&tid, &attr, threadFunction, p_str)) { fail("Error while creating thread"); } } } /* end of while */ close(sockfd); return 0; /* we never get here */ }