int main() { int sckt, portnum, newsckt, clisize, status; struct sockaddr_in servadd, cliadd; //open socket sckt = socket(AF_INET, SOCK_STREAM, 0); if(sckt < 0) { printf("ERROR: Could not open socket\n"); } //bind the port portnum = 4502; servadd.sin_family = AF_INET; servadd.sin_addr.s_addr = INADDR_ANY; servadd.sin_port = htons(portnum); if(bind(sckt, (struct sockaddr *) &servadd, sizeof(servadd)) < 0) printf("ERROR: Could not bind!\n"); while(1) { //listen listen(sckt, 5); //accept connection on socket clisize = sizeof(cliadd); printf("Waiting for client connection...\n"); newsckt = accept(sckt, (struct sockaddr *) &cliadd, &clisize); if(newsckt < 0) printf("ERROR: Could not accept!\n"); //read message from client status = recv(newsckt, buffer, MAX_BUFFER_SIZE, 0); if(status < 0) printf("ERROR: Could not read from socket\n"); printf("Client send message: %s\n", buffer); char *message; message = interprut_request(buffer); //message = "Message recieved"; printf("Sending response: %s\n", message); status = send(newsckt, message, strlen(message), 0); if(str_starts_with(message, "quit")) { exit(0); } if(status < 0) printf("ERROR: Could not write to socket\n"); set_buffer_empty(); } return(0); }
static void brelse_free(struct btree *btree, struct buffer_head *buffer) { struct sb *sb = btree->sb; block_t block = bufindex(buffer); if (bufcount(buffer) != 1) { warn("free block %Lx still in use!", (L)bufindex(buffer)); brelse(buffer); assert(bufcount(buffer) == 0); return; } brelse(buffer); (btree->ops->bfree)(sb, block, 1); set_buffer_empty(buffer); // free it!!! (and need a buffer free state) }