Client sends FIN_ACK but server responds with SYN_ACK

I'm trying to investigate the problem related to the TCP socket communication on the Linux(v3.10). These software use the TCP socket for the inter process communication on the same linux system. Client software sends data and Server software just receives data. Client software everytime creates a new socket and connects , send data and then close. Client software do this about 1 thousand of times.

Client : socket() -> connect() -> send(data) -> close() -> socket() -> ...

Server : select() -> accept() -> select() -> recv(data) -> if (recv() == 0) close() -> select() -> ...

Normally it works but sometimes server software seems freezed. Client software connects and sends data but server software just waits for a new connection using select(). I checked tcpdump and client sends PSH and FIN but server responds with SYN_ACK. After this server only responds SYN_ACK. Can someone explain why this happens ? and any idea to solve this ?

Client -> Server : [SYN]

Server -> Client : [SYN, ACK]

Client -> Server : [ACK]

Client -> Server : [PSH, ACK]

Client -> Server : [FIN, ACK]

Client -> Server : [TCP Retransmission][FIN, ACK]

Client -> Server : [TCP Retransmission][FIN, PSH, ACK]

Client -> Server : [TCP Retransmission][FIN, PSH, ACK]

Server -> Client : [TCP Retransmission][SYN, ACK]