--- a/sms_main.c	2024-10-08 23:11:01.169908895 +0800
+++ b/sms_main.c	2024-10-08 23:10:52.929909691 +0800
@@ -46,7 +46,8 @@
 static const char* dev = "/dev/ttyUSB0";
 static const char* storage = "";
 static const char* dateformat = "%D %T";
-
+FILE* pf;
+FILE* pfi;
 static void setserial(int baudrate)
 {
 	struct termios t;
@@ -115,7 +116,9 @@
 static void timeout()
 {
 	fprintf(stderr,"No response from modem.\n");
-	exit(2);
+	 if (pf) fclose(pf);
+    if (pfi) fclose(pfi);
+    exit(2);
 }
 
 static int starts_with(const char* prefix, const char* str)
@@ -168,12 +171,14 @@
 	int rawoutput = 0;
 	int jsonoutput = 0;
 	int debug = 0;
+	int user_set_timeout = 5;
 	int dcs = -1;
 
-	while ((ch = getopt(argc, argv, "b:c:d:Ds:f:jRr")) != -1){
+	while ((ch = getopt(argc, argv, "b:c:t:d:Ds:f:jRr")) != -1){
 		switch (ch) {
 		case 'b': baudrate = atoi(optarg); break;
 		case 'c': dcs = atoi(optarg); break;
+		case 't': user_set_timeout = atoi(optarg);break;
 		case 'd': dev = optarg; break;
 		case 'D': debug = 1; break;
 		case 's': storage = optarg; break;
@@ -237,8 +242,8 @@
 	if (port < 0)
 		fprintf(stderr,"reopen(%s)\n", dev);
 
-	FILE* pf = fdopen(port, "w");
-	FILE* pfi = fdopen(port, "r");
+	pf = fdopen(port, "w");
+	pfi = fdopen(port, "r");
 	if (!pf || ! pfi)
 		fprintf(stderr,"open port failed\n");
 	if(setvbuf(pf, NULL, _IOLBF, 0))
@@ -758,7 +763,8 @@
 
 	if (!strcmp("at", argv[0]))
 	{
-		alarm(5);
+		
+		alarm(user_set_timeout);
 		fputs(argv[1], pf);
 		fputs("\r\n", pf);
 
