La naturaleza del recv es esperra asi que frente a eso creo que no podrias hacer nada.
un alternativa es que utilices programacion por hilos, mejor aun a travez de la instruccion fork..como lo harias?
Pues bien generas un hijo que quede en proceso de espera , es decir con el recv, mientras que desde el padre o desde otro proceso hijo ejecutas un temporizador, de este modo una vez el hijo haya recibido conexion, se manda la señal de kill al proceso hijo del temporizador, y si bien el proceso hijo de la conwexion ha superado el tiempo controlado por el proceso hijo del temporizador, este deberia enviar una señal de kill al proceso de recv..no se me haya hecho entender, pero sino conoces a ejecucion de hilos, por fork, es decir por padre hijo, o bien a travez de threads, seria conveniente que aprovecharas para aprender ya que esto te puede ser de mucha utiliadad.
Cualquier inquietud con gusto la resolvere
juank